mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
Twl版ほぼ日消去ツールと同じ表示に修正。
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@288 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
7df65bdac7
commit
af27b44ed1
@ -41,6 +41,12 @@
|
|||||||
nn::dbg::PrintResult(result); \
|
nn::dbg::PrintResult(result); \
|
||||||
} \
|
} \
|
||||||
|
|
||||||
|
#define RED 1.0f, 0.0f, 0.0f
|
||||||
|
#define GREEN 0.0f, 1.0f, 0.0f
|
||||||
|
#define YELLOW 1.0f, 1.0f, 0.0f
|
||||||
|
#define WHITE 1.0f, 1.0f, 1.0f
|
||||||
|
#define BLACK 0.0f, 0.0f, 0.0f
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
const char* const NAND_TWL_ARCHIVE_NAME = "twln:";
|
const char* const NAND_TWL_ARCHIVE_NAME = "twln:";
|
||||||
const char* const NAND_TWL_KENJ_DIR_PATHNAME = "twln:/title/00030004/4b454e4a";
|
const char* const NAND_TWL_KENJ_DIR_PATHNAME = "twln:/title/00030004/4b454e4a";
|
||||||
@ -82,7 +88,6 @@ namespace {
|
|||||||
};
|
};
|
||||||
|
|
||||||
nn::Result DeleteKENJ(void);
|
nn::Result DeleteKENJ(void);
|
||||||
void FatalDrawing(nn::Result result);
|
|
||||||
|
|
||||||
const size_t ERASE_THREAD_STACK_SIZE = 0x1000;
|
const size_t ERASE_THREAD_STACK_SIZE = 0x1000;
|
||||||
nn::os::Thread s_EraseThread;
|
nn::os::Thread s_EraseThread;
|
||||||
@ -90,35 +95,24 @@ namespace {
|
|||||||
|
|
||||||
demo::RenderSystemDrawing s_RenderSystem;
|
demo::RenderSystemDrawing s_RenderSystem;
|
||||||
|
|
||||||
|
bool s_IsAppExist = false;
|
||||||
|
bool s_IsFinish = false;
|
||||||
|
bool s_IsSaveDataCleanSuccess = false;
|
||||||
|
bool s_IsAppDeleteSuccess = false;
|
||||||
|
nn::Result s_result;
|
||||||
|
|
||||||
// グラフィックスに割り当てるメモリ
|
// グラフィックスに割り当てるメモリ
|
||||||
const size_t s_GxHeapSize = 0x800000;
|
const size_t s_GxHeapSize = 0x800000;
|
||||||
|
|
||||||
::std::vector<std::string>* s_pOperationMessage;
|
|
||||||
|
|
||||||
|
|
||||||
void EraseThreadFunc(void)
|
void EraseThreadFunc(void)
|
||||||
{
|
{
|
||||||
nn::Result result;
|
|
||||||
|
|
||||||
s_pOperationMessage->push_back(std::string(""));
|
|
||||||
|
|
||||||
// ほぼ日健康手帳を消去する
|
// ほぼ日健康手帳を消去する
|
||||||
result = DeleteKENJ();
|
s_result = DeleteKENJ();
|
||||||
|
|
||||||
if(result.IsFailure())
|
s_IsFinish = true;
|
||||||
{
|
|
||||||
nn::dbg::PrintResult(result);
|
|
||||||
s_pOperationMessage->push_back(std::string("Failed Delete Program"));
|
|
||||||
FatalDrawing(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
s_pOperationMessage->push_back(std::string(""));
|
|
||||||
s_pOperationMessage->push_back(std::string("Finished."));
|
|
||||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, 0, 1, 0, 0);
|
|
||||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY1, 0, 1, 0, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
nn::Result FillRandamDataToKENJSaveData(void)
|
nn::Result FillRandamDataToKENJSaveData(void)
|
||||||
{
|
{
|
||||||
nn::Result result;
|
nn::Result result;
|
||||||
@ -189,12 +183,12 @@ namespace {
|
|||||||
nn::fs::Directory dir;
|
nn::fs::Directory dir;
|
||||||
if( dir.TryInitialize(NAND_TWL_KENJ_DIR_PATHNAME).IsFailure() )
|
if( dir.TryInitialize(NAND_TWL_KENJ_DIR_PATHNAME).IsFailure() )
|
||||||
{
|
{
|
||||||
s_pOperationMessage->push_back(std::string("KENJ not found\n"));
|
|
||||||
dir.Finalize();
|
dir.Finalize();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s_pOperationMessage->push_back(std::string("Deleting..."));
|
// アプリ存在フラグを上げる
|
||||||
|
s_IsAppExist = true;
|
||||||
|
|
||||||
// ここでfinalizeしておかないと、DeleteProgramでフェータルになる。
|
// ここでfinalizeしておかないと、DeleteProgramでフェータルになる。
|
||||||
dir.Finalize();
|
dir.Finalize();
|
||||||
@ -206,9 +200,18 @@ namespace {
|
|||||||
nn::fs::Unmount( "twln:" );
|
nn::fs::Unmount( "twln:" );
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s_IsSaveDataCleanSuccess = true;
|
||||||
|
}
|
||||||
|
|
||||||
// ほぼ日健康手帳を消す
|
// ほぼ日健康手帳を消す
|
||||||
result = nn::am::DeleteUserProgram(nn::fs::MEDIA_TYPE_NAND, NAND_TWL_KENJ_PROGRAM_ID);
|
result = nn::am::DeleteUserProgram(nn::fs::MEDIA_TYPE_NAND, NAND_TWL_KENJ_PROGRAM_ID);
|
||||||
|
if( result.IsSuccess() )
|
||||||
|
{
|
||||||
|
s_IsAppDeleteSuccess = true;
|
||||||
|
}
|
||||||
|
|
||||||
UTIL_RETURN_IF_NOT_AM_NOT_FOUND(result);
|
UTIL_RETURN_IF_NOT_AM_NOT_FOUND(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,40 +221,85 @@ namespace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SetTextWriterCore()
|
void DrawResultText()
|
||||||
{
|
{
|
||||||
using namespace common;
|
s_RenderSystem.SetFontSize(8.0f);
|
||||||
|
s_RenderSystem.SetColor( YELLOW );
|
||||||
|
s_RenderSystem.DrawText(10.0f, 20.0f, "SaveData Cleaner");
|
||||||
|
|
||||||
GetTextWriter()->Print("KENJ Eraser\n\n");
|
s_RenderSystem.SetColor( WHITE );
|
||||||
::std::vector<std::string>::iterator it;
|
s_RenderSystem.DrawText(10.0f, 60.0f, "Initialcode : KENJ");
|
||||||
for (it = s_pOperationMessage->begin(); it != s_pOperationMessage->end(); it++)
|
|
||||||
|
if( s_result.IsSuccess() )
|
||||||
{
|
{
|
||||||
GetTextWriter()->Printf("%s\n", it->c_str());
|
if( s_IsAppExist )
|
||||||
|
{
|
||||||
|
s_RenderSystem.SetColor( GREEN );
|
||||||
|
s_RenderSystem.DrawText(10.0f, 75.0f, "application found");
|
||||||
|
|
||||||
|
s_RenderSystem.SetColor( WHITE );
|
||||||
|
s_RenderSystem.DrawText(10.0f, 120.0f, "Private Save :");
|
||||||
|
s_RenderSystem.DrawText(10.0f, 135.0f, "Public Save :");
|
||||||
|
s_RenderSystem.DrawText(10.0f, 150.0f, "application :");
|
||||||
|
|
||||||
|
s_RenderSystem.SetColor( YELLOW );
|
||||||
|
s_RenderSystem.DrawText(130.0f, 120.0f, "not existed");
|
||||||
|
|
||||||
|
s_RenderSystem.SetColor( GREEN );
|
||||||
|
s_RenderSystem.DrawText(130.0f, 135.0f, "cleanup succeeded");
|
||||||
|
s_RenderSystem.DrawText(130.0f, 150.0f, "cleanup succeeded");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s_RenderSystem.SetColor( YELLOW );
|
||||||
|
s_RenderSystem.DrawText(10.0f, 70.0f, "application not found");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
}
|
|
||||||
|
|
||||||
void FatalDrawing(nn::Result result)
|
|
||||||
{
|
|
||||||
char resultStr[32];
|
|
||||||
std::snprintf(resultStr, sizeof(resultStr), "%X", result.GetPrintableBits());
|
|
||||||
s_pOperationMessage->push_back(resultStr);
|
|
||||||
|
|
||||||
for(;;)
|
|
||||||
{
|
{
|
||||||
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0);
|
s_RenderSystem.SetColor( WHITE );
|
||||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, 1.f, 0, 0, 0);
|
s_RenderSystem.DrawText(10.0f, 120.0f, "Private Save :");
|
||||||
s_RenderSystem.Clear();
|
s_RenderSystem.DrawText(10.0f, 135.0f, "Public Save :");
|
||||||
|
s_RenderSystem.DrawText(10.0f, 150.0f, "application :");
|
||||||
|
|
||||||
common::SetDrawTextHandler(SetTextWriterCore);
|
s_RenderSystem.SetColor( YELLOW );
|
||||||
common::DrawResFont(NN_GX_DISPLAY0);
|
s_RenderSystem.DrawText(130.0f, 120.0f, "not existed");
|
||||||
s_RenderSystem.SwapBuffers();
|
|
||||||
|
|
||||||
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1);
|
// アプリある?
|
||||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY1, 1.f, 0, 0, 0);
|
if( s_IsAppExist )
|
||||||
s_RenderSystem.Clear();
|
{
|
||||||
|
s_RenderSystem.SetColor( GREEN );
|
||||||
|
s_RenderSystem.DrawText(10.0f, 75.0f, "application found");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s_RenderSystem.SetColor( RED );
|
||||||
|
s_RenderSystem.DrawText(10.0f, 75.0f, "application not found");
|
||||||
|
}
|
||||||
|
|
||||||
s_RenderSystem.SwapBuffers();
|
// セーブデータの乱数埋めでエラー?
|
||||||
|
if( s_IsSaveDataCleanSuccess )
|
||||||
|
{
|
||||||
|
s_RenderSystem.SetColor( GREEN );
|
||||||
|
s_RenderSystem.DrawText(130.0f, 135.0f, "cleanup succeeded");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s_RenderSystem.SetColor( RED );
|
||||||
|
s_RenderSystem.DrawText(130.0f, 135.0f, "cleanup failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
// アプリ削除でエラー?
|
||||||
|
if( s_IsAppDeleteSuccess )
|
||||||
|
{
|
||||||
|
s_RenderSystem.SetColor( GREEN );
|
||||||
|
s_RenderSystem.DrawText(130.0f, 150.0f, "cleanup failed");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s_RenderSystem.SetColor( RED );
|
||||||
|
s_RenderSystem.DrawText(130.0f, 150.0f, "cleanup failed");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -287,32 +335,51 @@ extern "C" void nnMain(void)
|
|||||||
// ResFontの初期化
|
// ResFontの初期化
|
||||||
common::InitializeResFont();
|
common::InitializeResFont();
|
||||||
|
|
||||||
std::vector<std::string> operationMessage;
|
|
||||||
s_pOperationMessage = &operationMessage;
|
|
||||||
|
|
||||||
s_EraseThread.Start(EraseThreadFunc, s_EraseThreadStack);
|
s_EraseThread.Start(EraseThreadFunc, s_EraseThreadStack);
|
||||||
|
|
||||||
// ボタン入力
|
s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, BLACK, 0);
|
||||||
nn::hid::PadReader padReader;
|
s_RenderSystem.SetClearColor(NN_GX_DISPLAY1, BLACK, 0);
|
||||||
nn::hid::PadStatus padStatus;
|
|
||||||
|
|
||||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, 0, 0, 0, 0);
|
|
||||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY1, 0, 0, 0, 0);
|
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
padReader.ReadLatest(&padStatus);
|
if( s_IsFinish )
|
||||||
|
{
|
||||||
|
// 初期化
|
||||||
|
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0);
|
||||||
|
s_RenderSystem.Clear();
|
||||||
|
|
||||||
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0);
|
// 上画面の色変更
|
||||||
s_RenderSystem.Clear();
|
if( s_result.IsSuccess() )
|
||||||
|
{
|
||||||
|
if( !s_IsAppExist )
|
||||||
|
{
|
||||||
|
s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, YELLOW, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, GREEN, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, RED, 0);
|
||||||
|
}
|
||||||
|
|
||||||
common::SetDrawTextHandler(SetTextWriterCore);
|
// バッファへ
|
||||||
common::DrawResFont(NN_GX_DISPLAY0);
|
s_RenderSystem.SwapBuffers();
|
||||||
s_RenderSystem.SwapBuffers();
|
|
||||||
|
// 初期化
|
||||||
|
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1);
|
||||||
|
s_RenderSystem.Clear();
|
||||||
|
|
||||||
|
// 変更
|
||||||
|
DrawResultText();
|
||||||
|
common::DrawResFont(NN_GX_DISPLAY1);
|
||||||
|
|
||||||
|
// バッファへ
|
||||||
|
s_RenderSystem.SwapBuffers();
|
||||||
|
}
|
||||||
|
|
||||||
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1);
|
|
||||||
s_RenderSystem.Clear();
|
|
||||||
s_RenderSystem.SwapBuffers();
|
|
||||||
nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(10));
|
nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(10));
|
||||||
|
|
||||||
if ( nn::applet::IsExpectedToCloseApplication() )
|
if ( nn::applet::IsExpectedToCloseApplication() )
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user