This commit is contained in:
@@ -27,22 +27,92 @@
|
||||
|
||||
#ifdef INCLUDE_BUILTIN_SCRIPTS
|
||||
#include "../../build/TegraExplorer/script/builtin.h"
|
||||
|
||||
#define MAX_BUILTIN_MENU_ENTRIES (EMBEDDED_SCRIPTS_LEN * 2)
|
||||
|
||||
typedef struct {
|
||||
char name[64];
|
||||
int scriptIndices[EMBEDDED_SCRIPTS_LEN];
|
||||
int scriptCount;
|
||||
} EmbeddedScriptFolder_t;
|
||||
|
||||
static void GetScriptDisplayName(const char *fullName, char *out, size_t outSize) {
|
||||
if (!out || outSize == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const char *start = strrchr(fullName, '/');
|
||||
start = (start) ? start + 1 : fullName;
|
||||
|
||||
size_t len = 0;
|
||||
while (start[len] && len < outSize - 1) {
|
||||
len++;
|
||||
}
|
||||
|
||||
if (len >= 3 && start[len - 3] == '.' && start[len - 2] == 't' && start[len - 1] == 'e') {
|
||||
len -= 3;
|
||||
}
|
||||
|
||||
if (len >= outSize) {
|
||||
len = outSize - 1;
|
||||
}
|
||||
|
||||
memcpy(out, start, len);
|
||||
out[len] = '\0';
|
||||
}
|
||||
|
||||
static void RunEmbeddedScriptIndex(int index) {
|
||||
if (index < 0 || index >= EMBEDDED_SCRIPTS_LEN) {
|
||||
return;
|
||||
}
|
||||
|
||||
RunScriptString((char*)embedded_scripts_g[index].script, (u32)strlen(embedded_scripts_g[index].script));
|
||||
}
|
||||
|
||||
static void ShowEmbeddedFolder(const EmbeddedScriptFolder_t *folder) {
|
||||
if (!folder || folder->scriptCount <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
Vector_t ent = newVec(sizeof(MenuEntry_t), folder->scriptCount + 1);
|
||||
MenuEntry_t backEntry = {.optionUnion = COLORTORGB(COLOR_WHITE), .name = "<- Zurück"};
|
||||
vecAdd(&ent, backEntry);
|
||||
|
||||
char displayNames[EMBEDDED_SCRIPTS_LEN][64] = {{0}};
|
||||
for (int i = 0; i < folder->scriptCount; i++) {
|
||||
int scriptIndex = folder->scriptIndices[i];
|
||||
if (scriptIndex < 0 || scriptIndex >= EMBEDDED_SCRIPTS_LEN) {
|
||||
continue;
|
||||
}
|
||||
|
||||
GetScriptDisplayName(embedded_scripts_g[scriptIndex].name, displayNames[i], sizeof(displayNames[i]));
|
||||
MenuEntry_t entry = {.optionUnion = COLORTORGB(COLOR_BLUE), .name = displayNames[i], .icon = 128};
|
||||
vecAdd(&ent, entry);
|
||||
}
|
||||
|
||||
int selected = (ent.count > 1) ? 1 : 0;
|
||||
while (1) {
|
||||
gfx_clearscreen();
|
||||
gfx_printf("%s\n\n", folder->name);
|
||||
int res = newMenu(&ent, selected, 79, 28, ALWAYSREDRAW | ENABLEPAGECOUNT, ent.count - 1);
|
||||
if (res <= 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
selected = res;
|
||||
int scriptIndex = folder->scriptIndices[res - 1];
|
||||
RunEmbeddedScriptIndex(scriptIndex);
|
||||
}
|
||||
|
||||
free(ent.data);
|
||||
}
|
||||
#endif
|
||||
|
||||
extern hekate_config h_cfg;
|
||||
|
||||
enum {
|
||||
#ifndef SCRIPT_ONLY
|
||||
MainExplore = 0,
|
||||
MainBrowseSd,
|
||||
MainMountSd,
|
||||
MainBrowseEmmc,
|
||||
MainBrowseEmummc,
|
||||
MainTools,
|
||||
MainPartitionSd,
|
||||
MainViewKeys,
|
||||
MainViewCredits,
|
||||
MainExit,
|
||||
MainExit = 0,
|
||||
#else
|
||||
MainExit = 0,
|
||||
#endif
|
||||
@@ -56,18 +126,9 @@ enum {
|
||||
|
||||
MenuEntry_t mainMenuEntries[] = {
|
||||
#ifndef SCRIPT_ONLY
|
||||
[MainExplore] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "-- Explore --"},
|
||||
[MainBrowseSd] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Browse SD"},
|
||||
[MainMountSd] = {.optionUnion = COLORTORGB(COLOR_YELLOW)}, // To mount/unmount the SD
|
||||
[MainBrowseEmmc] = {.optionUnion = COLORTORGB(COLOR_BLUE), .name = "Browse EMMC"},
|
||||
[MainBrowseEmummc] = {.optionUnion = COLORTORGB(COLOR_BLUE), .name = "Browse EMUMMC"},
|
||||
[MainTools] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "\n-- Tools --"},
|
||||
[MainPartitionSd] = {.optionUnion = COLORTORGB(COLOR_ORANGE), .name = "Partition the sd"},
|
||||
[MainViewKeys] = {.optionUnion = COLORTORGB(COLOR_YELLOW), .name = "View dumped keys"},
|
||||
[MainViewCredits] = {.optionUnion = COLORTORGB(COLOR_YELLOW), .name = "Credits"},
|
||||
[MainExit] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "\n-- Exit --"},
|
||||
[MainExit] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "-- Exit --"},
|
||||
#else
|
||||
[MainExit] = {.optionUnion = COLORTORGB(COLOR_WHITE), .name = "\n-- Exit --"},
|
||||
[MainExit] = {.optionUnion = COLORTORGB(COLOR_WHITE), .name = "-- Exit --"},
|
||||
#endif
|
||||
[MainPowerOff] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Power off"},
|
||||
[MainRebootRCM] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Reboot to RCM"},
|
||||
@@ -77,62 +138,7 @@ MenuEntry_t mainMenuEntries[] = {
|
||||
[MainScripts] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "\n-- Scripts --"}
|
||||
};
|
||||
|
||||
void HandleSD(){
|
||||
gfx_clearscreen();
|
||||
TConf.curExplorerLoc = LOC_SD;
|
||||
if (!sd_mount() || sd_get_card_removed()){
|
||||
gfx_printf("Sd is not mounted!");
|
||||
hidWait();
|
||||
}
|
||||
else
|
||||
FileExplorer("sd:/");
|
||||
}
|
||||
|
||||
void HandleEMMC(){
|
||||
GptMenu(MMC_CONN_EMMC);
|
||||
}
|
||||
|
||||
void HandleEMUMMC(){
|
||||
GptMenu(MMC_CONN_EMUMMC);
|
||||
}
|
||||
|
||||
void ViewKeys(){
|
||||
gfx_clearscreen();
|
||||
for (int i = 0; i < 3; i++){
|
||||
gfx_printf("\nBis key 0%d: ", i);
|
||||
PrintKey(dumpedKeys.bis_key[i], AES_128_KEY_SIZE * 2);
|
||||
}
|
||||
|
||||
gfx_printf("\nMaster key 0: ");
|
||||
PrintKey(dumpedKeys.master_key, AES_128_KEY_SIZE);
|
||||
gfx_printf("\nHeader key: ");
|
||||
PrintKey(dumpedKeys.header_key, AES_128_KEY_SIZE * 2);
|
||||
gfx_printf("\nSave mac key: ");
|
||||
PrintKey(dumpedKeys.save_mac_key, AES_128_KEY_SIZE);
|
||||
|
||||
u8 fuseCount = 0;
|
||||
for (u32 i = 0; i < 32; i++){
|
||||
if ((fuse_read_odm(7) >> i) & 1)
|
||||
fuseCount++;
|
||||
}
|
||||
|
||||
gfx_printf("\n\nPkg1 ID: '%s'\nFuse count: %d", TConf.pkg1ID, fuseCount);
|
||||
|
||||
hidWait();
|
||||
}
|
||||
|
||||
void ViewCredits(){
|
||||
gfx_clearscreen();
|
||||
gfx_printf("\nTegraexplorer v%d.%d.%d\nBy SuchMemeManySkill\n\nBased on Lockpick_RCM & Hekate, from shchmue & CTCaer\n\n\n", LP_VER_MJ, LP_VER_MN, LP_VER_BF);
|
||||
|
||||
if (hidRead()->r)
|
||||
gfx_printf("%k\"I'm not even sure if it works\" - meme", COLOR_ORANGE);
|
||||
|
||||
hidWait();
|
||||
}
|
||||
|
||||
extern bool sd_mounted;
|
||||
extern bool is_sd_inited;
|
||||
extern int launch_payload(char *path);
|
||||
|
||||
void RebootToAMS(){
|
||||
@@ -143,26 +149,11 @@ void RebootToHekate(){
|
||||
launch_payload("sd:/bootloader/update.bin");
|
||||
}
|
||||
|
||||
void MountOrUnmountSD(){
|
||||
gfx_clearscreen();
|
||||
if (sd_mounted)
|
||||
sd_unmount();
|
||||
else if (!sd_mount())
|
||||
hidWait();
|
||||
}
|
||||
|
||||
menuPaths mainMenuPaths[] = {
|
||||
#ifndef SCRIPT_ONLY
|
||||
[MainBrowseSd] = HandleSD,
|
||||
[MainMountSd] = MountOrUnmountSD,
|
||||
[MainBrowseEmmc] = HandleEMMC,
|
||||
[MainBrowseEmummc] = HandleEMUMMC,
|
||||
[MainPartitionSd] = FormatSD,
|
||||
[MainViewKeys] = ViewKeys,
|
||||
[MainViewCredits] = ViewCredits,
|
||||
#endif
|
||||
[MainRebootAMS] = RebootToAMS,
|
||||
[MainRebootHekate] = RebootToHekate,
|
||||
#endif
|
||||
[MainRebootRCM] = reboot_rcm,
|
||||
[MainPowerOff] = power_off,
|
||||
[MainRebootNormal] = reboot_normal,
|
||||
@@ -175,16 +166,6 @@ void EnterMainMenu(){
|
||||
sd_unmount();
|
||||
|
||||
#ifndef SCRIPT_ONLY
|
||||
// -- Explore --
|
||||
mainMenuEntries[MainBrowseSd].hide = !sd_mounted;
|
||||
mainMenuEntries[MainMountSd].name = (sd_mounted) ? "Unmount SD" : "Mount SD";
|
||||
mainMenuEntries[MainBrowseEmummc].hide = (!emu_cfg.enabled || !sd_mounted);
|
||||
|
||||
// -- Tools --
|
||||
mainMenuEntries[MainPartitionSd].hide = (!is_sd_inited || sd_get_card_removed());
|
||||
mainMenuEntries[MainViewKeys].hide = !TConf.keysDumped;
|
||||
|
||||
// -- Exit --
|
||||
mainMenuEntries[MainRebootAMS].hide = (!sd_mounted || !FileExists("sd:/atmosphere/reboot_payload.bin"));
|
||||
mainMenuEntries[MainRebootHekate].hide = (!sd_mounted || !FileExists("sd:/bootloader/update.bin"));
|
||||
mainMenuEntries[MainRebootRCM].hide = h_cfg.t210b01;
|
||||
|
||||
Reference in New Issue
Block a user