Add dev menu + dump all

This commit is contained in:
J-D-K
2018-06-13 22:55:10 -04:00
parent 4251824d3a
commit 498e428ba4
8 changed files with 113 additions and 27 deletions

View File

@@ -11,7 +11,8 @@ namespace sys
void debugWrite(const std::string& out);
//Uh oh
extern bool devMode;
extern bool sysSave;
extern bool devMenu;
}
#endif // SYS_H

View File

@@ -8,6 +8,9 @@ namespace util
//Returns string with date + time
std::string getDateTime();
//Creates user dir
void makeUserDir(data::user& u);
//Creates Dir 'JKSV/[user]/[title]
void makeTitleDir(data::user& u, data::titledata& t);

View File

@@ -114,13 +114,13 @@ namespace data
if(R_FAILED(res) || total == 0)
break;
if((info.SaveDataType == FsSaveDataType_SaveData) || sys::devMode)
if((info.SaveDataType == FsSaveDataType_SaveData) || sys::sysSave)
{
int u = getUserIndex(info.userID);
if(u == -1)
{
user newUser;
if(newUser.init(info.userID) || (sys::devMode && newUser.initNoChk(info.userID)))
if(newUser.init(info.userID) || (sys::sysSave && newUser.initNoChk(info.userID)))
{
users.push_back(newUser);
@@ -167,7 +167,8 @@ namespace data
res = nsGetApplicationControlData(1, id, dat, sizeof(NsApplicationControlData), &outSz);
if(R_FAILED(res) || outSz < sizeof(dat->nacp))
{
printf("nsGetAppCtrlData Failed: 0x%08X\n", (unsigned)res);
if(!sys::sysSave)
printf("nsGetAppCtrlData Failed: 0x%08X\n", (unsigned)res);
delete dat;
}

View File

@@ -29,7 +29,7 @@ namespace fs
if(r == -1)
return false;
}
else if(sys::devMode && open.getType() == FsSaveDataType_SystemSaveData)
else if(sys::sysSave && open.getType() == FsSaveDataType_SystemSaveData)
{
res = fsMount_SystemSaveData(&sv, open.getID());
if(R_FAILED(res))

View File

@@ -43,7 +43,7 @@ int main(int argc, const char *argv[])
gfx::clearBufferColor(0x3B3B3BFF);
gfx::drawText("JKSV - 6/13/2018", 16, 16, 64, 0xFFFFFFFF);
gfx::drawRectangle(16, 64, 1248, 1, 0xFFFFFFFF);
gfx::drawRectangle(384, 64, 1, 592, 0xFFFFFFFF);
gfx::drawRectangle(448, 64, 1, 592, 0xFFFFFFFF);
gfx::drawRectangle(16, 656, 1248, 1, 0xFFFFFFFF);
ui::runApp(down, held);

View File

@@ -10,7 +10,27 @@ static std::fstream deb;
namespace sys
{
bool devMode = false;
bool sysSave = false;
bool devMenu = false;
void loadCfg()
{
std::fstream devIn("0x4A4B.dev", std::ios::in | std::ios::binary);
if(devIn.is_open())
{
uint8_t byte = 0;
devIn.read((char *)&byte, 1);
devIn.close();
sysSave = byte >> 7 & 1;
devMenu = byte >> 6 & 1;
if(sysSave)
printf("System save dumping enabled.\n");
if(devMenu)
printf("DevMenu enabled\n");
}
}
bool init()
{
@@ -46,14 +66,7 @@ namespace sys
mkdir("sdmc:/JKSV", 0777);
chdir("sdmc:/JKSV");
deb.open("deb.txt", std::ios::out);
std::fstream chk("0x4A4B.dev", std::ios::in);
if(chk.is_open())
{
devMode = true;
chk.close();
}
loadCfg();
return true;
}

View File

@@ -23,12 +23,13 @@ enum menuState
{
USR_SEL,
TTL_SEL,
FLD_SEL
FLD_SEL,
DEV_MNU
};
static int mstate = USR_SEL;
static ui::menu userMenu, titleMenu, folderMenu;
static ui::menu userMenu, titleMenu, folderMenu, devMenu;
static gfx::tex buttonA, buttonB, buttonX, buttonY;
namespace ui
@@ -129,14 +130,14 @@ namespace ui
else
length = start + 15;
uint32_t rectClr = 0x00 << 24 | ((0x88 + clrSh) & 0xFF) << 16 | ((0xbb + clrSh) & 0xFF) << 8 | 0xFF;
uint32_t rectClr = 0x00 << 24 | ((0x88 + clrSh) & 0xFF) << 16 | ((0xBB + clrSh) & 0xFF) << 8 | 0xFF;
for(int i = start; i < length; i++)
{
if(i == selected)
gfx::drawRectangle(x, y + ((i - start) * 36), rectWidth, 32, rectClr);
gfx::drawText(opt[i], x, y + ((i - start) * 36), 32, 0xFFFFFFFF);
gfx::drawText(opt[i], x, y + ((i - start) * 36), 38, 0xFFFFFFFF);
}
}
@@ -513,21 +514,26 @@ namespace ui
folderMenu.addOpt(list.getItem(i));
}
void devMenuPrepare()
{
devMenu.addOpt("Dump all saves");
}
void drawMenus()
{
switch(mstate)
{
case USR_SEL:
userMenu.print(16, 88, 364);
userMenu.print(16, 88, 424);
break;
case TTL_SEL:
titleMenu.print(16, 88, 364);
titleMenu.print(16, 88, 424);
break;
case FLD_SEL:
titleMenu.print(16, 88, 364);
folderMenu.print(390, 88, 874);
titleMenu.print(16, 88, 424);
folderMenu.print(456, 88, 808);
break;
}
}
@@ -539,12 +545,17 @@ namespace ui
if(down & KEY_A)
{
data::curUser = data::users[userMenu.getSelected()];
mkdir(data::curUser.getUsername().c_str(), 777);
util::makeUserDir(data::curUser);
titleMenuPrepare(data::curUser);
mstate = TTL_SEL;
}
else if(down & KEY_MINUS && sys::devMenu)
{
devMenu.reset();
devMenuPrepare();
mstate = DEV_MNU;
}
drawMenus();
@@ -578,7 +589,7 @@ namespace ui
unsigned startX = 1056;
if(sys::devMode)
if(sys::sysSave)
{
std::string drawType = "Type: ";
switch(data::curUser.titles[titleMenu.getSelected()].getType())
@@ -676,7 +687,7 @@ namespace ui
}
}
else
ui::showMessage("NEIN NEIN NEIN.");
ui::showMessage("NEIN! NEIN! NEIN!");
}
else if(down & KEY_X)
{
@@ -718,6 +729,54 @@ namespace ui
gfx::drawText("Back", startX += 38, 668, 32, 0xFFFFFFFF);
}
void showDevMenu(const uint64_t& down, const uint64_t& held)
{
devMenu.handleInput(down, held);
if(down & KEY_A)
{
switch(devMenu.getSelected())
{
case 0:
ui::progBar userProg(data::users.size());
for(unsigned i = 0; i < data::users.size(); i++)
{
data::curUser = data::users[i];
util::makeUserDir(data::curUser);
for(unsigned j = 0; j < data::curUser.titles.size(); j++)
{
data::curData = data::curUser.titles[j];
if(fs::mountSave(data::curUser, data::curData))
{
util::makeTitleDir(data::curUser, data::curData);
std::string to = util::getTitleDir(data::curUser, data::curData) + util::getDateTime();
mkdir(to.c_str(), 777);
to += "/";
std::string root = "sv:/";
fs::copyDirToDir(root, to);
fsdevUnmountDevice("sv");
}
userProg.draw("Dumping " + data::curUser.getUsername() + "...");
gfx::handleBuffs();
}
}
break;
}
}
else if(down & KEY_B)
mstate = USR_SEL;
devMenu.print(16, 88, 424);
gfx::handleBuffs();
}
void runApp(const uint64_t& down, const uint64_t& held)
{
switch(mstate)
@@ -733,6 +792,10 @@ namespace ui
case FLD_SEL:
showFolderMenu(down, held);
break;
case DEV_MNU:
showDevMenu(down, held);
break;
}
}

View File

@@ -22,6 +22,11 @@ namespace util
return std::string(ret);
}
void makeUserDir(data::user& u)
{
mkdir(u.getUsername().c_str(), 0777);
}
void makeTitleDir(data::user& u, data::titledata& t)
{
std::string path = u.getUsername() + "/" + t.getTitleSafe();