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); \
|
||||
} \
|
||||
|
||||
#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 {
|
||||
const char* const NAND_TWL_ARCHIVE_NAME = "twln:";
|
||||
const char* const NAND_TWL_KENJ_DIR_PATHNAME = "twln:/title/00030004/4b454e4a";
|
||||
@ -82,43 +88,31 @@ namespace {
|
||||
};
|
||||
|
||||
nn::Result DeleteKENJ(void);
|
||||
void FatalDrawing(nn::Result result);
|
||||
|
||||
const size_t ERASE_THREAD_STACK_SIZE = 0x1000;
|
||||
nn::os::Thread s_EraseThread;
|
||||
nn::os::StackBuffer<ERASE_THREAD_STACK_SIZE> s_EraseThreadStack;
|
||||
|
||||
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;
|
||||
|
||||
::std::vector<std::string>* s_pOperationMessage;
|
||||
|
||||
|
||||
|
||||
void EraseThreadFunc(void)
|
||||
{
|
||||
nn::Result result;
|
||||
|
||||
s_pOperationMessage->push_back(std::string(""));
|
||||
|
||||
// ほぼ日健康手帳を消去する
|
||||
result = DeleteKENJ();
|
||||
|
||||
if(result.IsFailure())
|
||||
{
|
||||
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);
|
||||
s_result = DeleteKENJ();
|
||||
|
||||
s_IsFinish = true;
|
||||
}
|
||||
|
||||
|
||||
nn::Result FillRandamDataToKENJSaveData(void)
|
||||
{
|
||||
nn::Result result;
|
||||
@ -189,12 +183,12 @@ namespace {
|
||||
nn::fs::Directory dir;
|
||||
if( dir.TryInitialize(NAND_TWL_KENJ_DIR_PATHNAME).IsFailure() )
|
||||
{
|
||||
s_pOperationMessage->push_back(std::string("KENJ not found\n"));
|
||||
dir.Finalize();
|
||||
}
|
||||
else
|
||||
{
|
||||
s_pOperationMessage->push_back(std::string("Deleting..."));
|
||||
// アプリ存在フラグを上げる
|
||||
s_IsAppExist = true;
|
||||
|
||||
// ここでfinalizeしておかないと、DeleteProgramでフェータルになる。
|
||||
dir.Finalize();
|
||||
@ -206,9 +200,18 @@ namespace {
|
||||
nn::fs::Unmount( "twln:" );
|
||||
return result;
|
||||
}
|
||||
else
|
||||
{
|
||||
s_IsSaveDataCleanSuccess = true;
|
||||
}
|
||||
|
||||
// ほぼ日健康手帳を消す
|
||||
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);
|
||||
}
|
||||
|
||||
@ -218,40 +221,85 @@ namespace {
|
||||
}
|
||||
|
||||
|
||||
void SetTextWriterCore()
|
||||
void DrawResultText()
|
||||
{
|
||||
using namespace common;
|
||||
|
||||
GetTextWriter()->Print("KENJ Eraser\n\n");
|
||||
::std::vector<std::string>::iterator it;
|
||||
for (it = s_pOperationMessage->begin(); it != s_pOperationMessage->end(); it++)
|
||||
s_RenderSystem.SetFontSize(8.0f);
|
||||
s_RenderSystem.SetColor( YELLOW );
|
||||
s_RenderSystem.DrawText(10.0f, 20.0f, "SaveData Cleaner");
|
||||
|
||||
s_RenderSystem.SetColor( WHITE );
|
||||
s_RenderSystem.DrawText(10.0f, 60.0f, "Initialcode : KENJ");
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void FatalDrawing(nn::Result result)
|
||||
{
|
||||
char resultStr[32];
|
||||
std::snprintf(resultStr, sizeof(resultStr), "%X", result.GetPrintableBits());
|
||||
s_pOperationMessage->push_back(resultStr);
|
||||
|
||||
for(;;)
|
||||
else
|
||||
{
|
||||
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0);
|
||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, 1.f, 0, 0, 0);
|
||||
s_RenderSystem.Clear();
|
||||
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 :");
|
||||
|
||||
common::SetDrawTextHandler(SetTextWriterCore);
|
||||
common::DrawResFont(NN_GX_DISPLAY0);
|
||||
s_RenderSystem.SwapBuffers();
|
||||
|
||||
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1);
|
||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY1, 1.f, 0, 0, 0);
|
||||
s_RenderSystem.Clear();
|
||||
|
||||
s_RenderSystem.SwapBuffers();
|
||||
s_RenderSystem.SetColor( YELLOW );
|
||||
s_RenderSystem.DrawText(130.0f, 120.0f, "not existed");
|
||||
|
||||
// アプリある?
|
||||
if( s_IsAppExist )
|
||||
{
|
||||
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");
|
||||
}
|
||||
|
||||
// セーブデータの乱数埋めでエラー?
|
||||
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の初期化
|
||||
common::InitializeResFont();
|
||||
|
||||
std::vector<std::string> operationMessage;
|
||||
s_pOperationMessage = &operationMessage;
|
||||
|
||||
s_EraseThread.Start(EraseThreadFunc, s_EraseThreadStack);
|
||||
|
||||
// ボタン入力
|
||||
nn::hid::PadReader padReader;
|
||||
nn::hid::PadStatus padStatus;
|
||||
|
||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, 0, 0, 0, 0);
|
||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY1, 0, 0, 0, 0);
|
||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, BLACK, 0);
|
||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY1, BLACK, 0);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
// バッファへ
|
||||
s_RenderSystem.SwapBuffers();
|
||||
|
||||
// 初期化
|
||||
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1);
|
||||
s_RenderSystem.Clear();
|
||||
|
||||
// 変更
|
||||
DrawResultText();
|
||||
common::DrawResFont(NN_GX_DISPLAY1);
|
||||
|
||||
// バッファへ
|
||||
s_RenderSystem.SwapBuffers();
|
||||
}
|
||||
|
||||
common::SetDrawTextHandler(SetTextWriterCore);
|
||||
common::DrawResFont(NN_GX_DISPLAY0);
|
||||
s_RenderSystem.SwapBuffers();
|
||||
|
||||
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1);
|
||||
s_RenderSystem.Clear();
|
||||
s_RenderSystem.SwapBuffers();
|
||||
nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(10));
|
||||
|
||||
if ( nn::applet::IsExpectedToCloseApplication() )
|
||||
|
||||
Loading…
Reference in New Issue
Block a user