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:
N2205 2011-05-26 11:05:29 +00:00
parent 7df65bdac7
commit af27b44ed1

View File

@ -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() )