git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@538 385bec56-5757-e545-9c3a-d8741f4650f1

This commit is contained in:
mizu 2011-12-13 02:44:38 +00:00
parent 08a942a45e
commit 2dc9f4e9c8
7 changed files with 185 additions and 150 deletions

View File

@ -59,7 +59,7 @@ ROMFS_IMPORTEE_PATH = L\"rom:/$(IMPORTEE_CIA)\"
CCFLAGS += -DROMFS_IMPORTEE_PATH=$(ROMFS_IMPORTEE_PATH)
ROM_SPEC_FILE = Imp.rsf
DESCRIPTOR = $(CTRSDK_ROOT)/resources/specfiles/repairtool.desc
DESCRIPTOR = $(CTRSDK_ROOT)/resources/specfiles/private/repairtool.desc
# バナー、アイコン
CTR_BANNER_SPEC = banner.bsf

View File

@ -342,7 +342,7 @@ void nnMain( void )
//シリアル表示(オプション)後にチェック
//デバッガ=15,実機=11
if (GettedSerLen < 11)ErrorStop("invalid Serial");
//if (GettedSerLen < 11)ErrorStop("invalid Serial");
fsize = FileRead(SIGN_FILE);//署名リード
if(fsize != 256)ErrorStop("sign file");//鍵のbit長は2046固定
@ -394,7 +394,7 @@ void nnMain( void )
//文字数チェック
//開発初期のファームアップで空ID本体が発生してたので念の為
//2011.5現在、製品で報告はない
if (GettedSerLen < 11)ErrorStop("invalid Serial");
//if (GettedSerLen < 11)ErrorStop("invalid Serial");
//本体シリアルがリストにあるかチェック
n =0;

View File

@ -47,7 +47,7 @@ TITLE = body
# 独自の RSF ファイルを指定する場合
ROM_SPEC_FILE = body.rsf
DESCRIPTOR = $(CTRSDK_ROOT)/resources/specfiles/repairtool.desc
DESCRIPTOR = $(CTRSDK_ROOT)/resources/specfiles/private/repairtool.desc
# バナー、アイコン
CTR_BANNER_SPEC = banner.bsf

View File

@ -46,6 +46,7 @@ nn::os::LightEvent insEvntSd(false);
bool Active,Formatted;
bool exActive;
tArcInfo arcInfo,arcInfo_ex;//アーカイブ情報
tDcList dcList,dcList2;//ディレクトリ格納
//Top画面エラー表示
int tmerr;
@ -71,7 +72,7 @@ tIsInsEject isInsEject;
extern u8 scr_evnt;
void WaitUI();
void PutError(ErcDev dev,int cd=0);
void PutError(TgtDev dev,int cd=0);
bool CheckInsExit();
@ -113,16 +114,16 @@ char fileBuffer_ex[512] NN_ATTRIBUTE_ALIGN(4);
#define FILEBUFF_SIZE sizeof(fileBuffer)
//エラー表示
char sts[64];
void PutError(ErcDev dev,int cd)
wchar_t sts[64];
void PutError(TgtDev dev,int cd)
{
nn::Result res;
switch (dev)
{
case ERC_DEV_CARD: res = savedata.LastNnResult;break;
case ERC_DEV_OUT: res = exsave.LastNnResult;break;
case TGT_CARD: res = savedata.LastNnResult;break;
case TGT_SD: res = exsave.LastNnResult;break;
}
GetErrorStr(dev,res,cd,sts);
GetErrorStr(dev,res,cd,(tChar*)sts);
scr_Status(sts,COLOR_RED);
}
@ -139,15 +140,15 @@ void waitSec(int sec)
}
char mes[128];
wchar_t mes[128];
//保存先のディレクトリ削除
bool TryDeleteDir()
{
if(exsave.Delete())return true;
//フォルダ削除に失敗したら手削除
strcpy(mes,"Illegal folder [ ");
strcat(mes,exsave.DirName);//フォルダ名
strcat(mes," ]");
wcscpy(mes,L"Illegal folder [ ");
wcscat(mes,exsave.DirName);//フォルダ名
wcscat(mes,L" ]");
//scr_Status(sts,COLOR_RED);
scr_MessOnCount(mes);
return false;
@ -184,30 +185,30 @@ RetCode Card2Sd()
//保存先ディレクトリ作成
//ディレクトリ作成時にクラスタサイズ、空き容量を取得
scr_Status("Create Dir to SD",COLOR_YELLO);
scr_Status(L"Create Dir to SD",COLOR_YELLO);
if (exsave.Create() == false)
{
PutError(ERC_DEV_OUT);
PutError(TGT_SD);
return ERROR;
}
//セーブデータのマウント
scr_Status("Mount SaveData",COLOR_YELLO);
scr_Status(L"Mount SaveData",COLOR_YELLO);
res = savedata.Mount();
if(res != RESULT_OK){
exsave.Unmount();
TryDeleteDir();
PutError(ERC_DEV_CARD);
PutError(TGT_CARD);
return ERROR;
}
//ディレクトリ情報
scr_Status("Get Directry",COLOR_YELLO);
if(savedata.GetInfo(&arcInfo,exsave.ClasterSize)==false)
//ディレクトリ情報
scr_Status(L"Get Directry",COLOR_YELLO);
if(savedata.GetInfo(&arcInfo,&dcList,exsave.ClasterSize)==false)
{
savedata.Unmount();
exsave.Unmount();
PutError(ERC_DEV_CARD);
PutError(TGT_CARD);
TryDeleteDir();
return ERROR;
}
@ -217,7 +218,7 @@ RetCode Card2Sd()
{//容量不足
savedata.Unmount();
exsave.Unmount();
PutError(ERC_DEV_OUT,ERC_WRITE_NS);
PutError(TGT_SD,ERC_NOSPACE);
TryDeleteDir();
return ERROR;
}
@ -226,21 +227,70 @@ RetCode Card2Sd()
if (arcInfo.FileCount > arcInfo.FileEntry){
savedata.Unmount();
exsave.Unmount();
PutError(ERC_DEV_OTHER,ERC_EXEC);
PutError(TGT_NONE,ERC_EXEC);
TryDeleteDir();
return ERROR;
}
if (arcInfo.DirCount > arcInfo.DirEntry)
{
savedata.Unmount();
PutError(TGT_NONE,ERC_EXEC);
return ERROR;
}
if(arcInfo.DirCount >= MAX_DCLIST)
{//ディレクトリ数が多すぎ
savedata.Unmount();
PutError(TGT_MEM,ERC_EXEC);
return ERROR;
}
bool mkdir;
//ディレクトリ作成
//空ディレクトリもチェックするゲームあるので(マリカ7)
//ファイルの存在と関係なく作成
//todo:パス名チェック
if(dcList.num >0)
{
int i,rev=0;
for (i=0;i<dcList.num;i++)
{
while(1){
if (exsave.MakeDir(dcList.name[i],&mkdir)==false)
{
if(mkdir==false)
{
res = RESULT_FAIL_OPENW;
break;
}
}else break;
}
if (res != RESULT_OK)break;
rev^=1;
//if (rev & 1)scr_Status(MessTxt(MT_CrtDir1),COLOR_YELLO);
//else scr_Status(MessTxt(MT_CrtDir2),COLOR_YELLO);
if (rev & 1)scr_Status(L"Create Directry -",COLOR_YELLO);
else scr_Status(L"Create Directry |",COLOR_YELLO);
}
if (res != RESULT_OK)
{
exsave.Unmount();
savedata.Unmount();
PutError(TGT_CARD);
return ERROR;
}
}
if (arcInfo.FileCount == 0)//ファイルが無い
{
scr_Status("no files",COLOR_YELLO);
scr_Status(L"no files",COLOR_YELLO);
savedata.Unmount();
exsave.Unmount();
TryDeleteDir();
return SUCCESS;//何もしない
}else{
//ファイルコピー
scr_Status("file copying",COLOR_SKY);
scr_Status(L"file copying",COLOR_SKY);
savedata.ResetPath();
s64 fsize;
res = RESULT_OK;
@ -250,11 +300,11 @@ RetCode Card2Sd()
if (res != RESULT_OK)
{
if (res == RESULT_DIR_LEVEL_OVER){
PutError(ERC_DEV_CARD,ERC_DIRDEPTH);
PutError(TGT_CARD,ERC_EXEC);
break;
}
if (res == RESULT_PATH_LENGTH_OVER){
PutError(ERC_DEV_CARD,ERC_PATH);
PutError(TGT_CARD,ERC_EXEC);
break;
}
res = RESULT_FAIL_OPEN;
@ -278,7 +328,8 @@ RetCode Card2Sd()
fsize = savedata.FileSize;
total += fsize;
if(CheckInsExit())break;//挿抜による中断
//SDで支障あるパス名の場合は別ファイルに格納する
//SDで支障あるパス名の場合は別ファイルに格納する
exsave.GetRootPath(file_pathw2);//格納先ルート取得
ChainPath(file_pathw2,file_pathw);//実パス名に変換
if (CheckPath(file_pathw2)==false)//パス名チェック
@ -289,16 +340,17 @@ RetCode Card2Sd()
break;
}
}else{
bool mkdir;
int rev;
//int rev;
while(1){
if (exsave.OpenC(file_pathw,fsize,&mkdir)==false)
{
if(mkdir)//ディレクトリ作成のみ
{//深いと作成に時間かかるので画面に変化つける
rev++;
if (rev & 1)scr_MessOnCount2("Create Directry -");
else scr_MessOnCount2("Create Directry |");
{//ディレクトリは作成済みなので作成されたらエラー
res = RESULT_FAIL_OPENW;
break;
//rev++;
//if (rev & 1)scr_MessOnCount2(L"Create Directry -");
//else scr_MessOnCount2(L"Create Directry |");
}else{
NN_LOG("%d\n",exsave.LastNnResult.GetDescription());
if(nn::fs::ResultInvalidArgument::Includes(exsave.LastNnResult))
@ -388,9 +440,9 @@ RetCode Card2Sd()
if(exsave.WriteSys(&arcInfo))//フォーマット情報
{
//成功
strcpy(sts,"output folder [ ");
strcat(sts,exsave.DirName);//保存先
strcat(sts," ]");
wcscpy(sts,L"output folder [ ");
wcscat(sts,exsave.DirName);//保存先
wcscat(sts,L" ]");
scr_Status(sts,COLOR_WHITE);
scr_CountPerMax(ct,arcInfo.FileCount);//ファイル数
@ -409,11 +461,11 @@ RetCode Card2Sd()
}
}
//失敗
if (res == RESULT_DEVICE_FULL)PutError(ERC_DEV_OUT,ERC_WRITE_NS);
else if ((res == RESULT_FAIL_WRITE) || (res== RESULT_FAIL_OPENW)) PutError(ERC_DEV_OUT);
else if ((res == RESULT_FAIL_READ) || (res== RESULT_FAIL_OPEN)) PutError(ERC_DEV_CARD);
else if (res == RESULT_FAIL_VERIFI) PutError(ERC_DEV_OUT,ERC_VERIFI);
else PutError(ERC_DEV_OTHER);
if (res == RESULT_DEVICE_FULL)PutError(TGT_SD,ERC_NOSPACE);
else if ((res == RESULT_FAIL_WRITE) || (res== RESULT_FAIL_OPENW)) PutError(TGT_SD);
else if ((res == RESULT_FAIL_READ) || (res== RESULT_FAIL_OPEN)) PutError(TGT_CARD);
else if (res == RESULT_FAIL_VERIFI) PutError(TGT_SD,ERC_VERIFI);
else PutError(TGT_NONE,ERC_EXEC);
TryDeleteDir();//ディレクトリごと削除
}
return ERROR;
@ -425,17 +477,13 @@ RetCode Card2Sd()
//呼ぶ前に tmerr のクリアを忘れない事
void CheckSaveDataState()
{
myResult myres;
Formatted = false;
Active = false;
if (savedata.GetPrdCode())
{
Active = true;//カード
myres = savedata.IsExist();//セーブマウント
//NN_LOG("%d",savedata.LastNnResult.GetDescription());
if (myres == RESULT_OK)
Active = true;//カードあり
if ( savedata.IsExist())//セーブ確認
{
Formatted=true;
}else{
@ -571,20 +619,20 @@ void nnMain()
{
case SUCCESS:
//CheckExSaveState(); //状態の更新
scr_ResultQuit("Success",COLOR_GREEN);//成功とQuitボタン
scr_ResultQuit(L"Success",COLOR_GREEN);//成功とQuitボタン
break;
case INSEXIT:
//scr_InsExitQuit();//挿抜検知表示 & Quit
ScrClr();//画面消去
scr_Backup();
if (isInsEject == InEx_EjcCard)PutError(ERC_DEV_CARD,ERC_DEVICE);
else if (isInsEject == InEx_EjcSd)PutError(ERC_DEV_OUT,ERC_DEVICE);
else PutError(ERC_DEV_OTHER);
scr_ResultQuit("Break",COLOR_RED);//エラーとQuitボタン
if (isInsEject == InEx_EjcCard)PutError(TGT_CARD,ERC_DEVICE);
else if (isInsEject == InEx_EjcSd)PutError(TGT_SD,ERC_DEVICE);
else PutError(TGT_NONE);
scr_ResultQuit(L"Break",COLOR_RED);//エラーとQuitボタン
break;
case CANCEL:break;
default://errors
scr_ResultQuit("Failed",COLOR_RED);//エラーとQuitボタン
scr_ResultQuit(L"Failed",COLOR_RED);//エラーとQuitボタン
break;
}
if (retc == CANCEL)break;

View File

@ -1,5 +1,7 @@
#include <nn.h>
#include <stdio.h>
#include <wchar.h>
#include <stdlib.h>
#include "screen.h"
#include "../../../../common/my_defs.h"
#include "../../ver.h"
@ -181,45 +183,45 @@ void touchQuit(u32 pos NN_IS_UNUSED_VAR)
//下画面
//Top Menu
const tPanel panel_Read = {(uptr)touchRead,"Export",80+20,30,160,80,PANEL_READ,SCREEN_LOWER};
const tPanel panel_Read = {(uptr)touchRead,L"Export",80+20,30,160,80,PANEL_READ,SCREEN_LOWER};
//const tPanel panel_Write = {(uptr)touchWrite,"Restore",80+20,130,160,80,PANEL_WRITE,SCREEN_LOWER};
//const tPanel panel_End = {(uptr)touchEnd,"End",80,180,160,30,PANEL_END,SCREEN_LOWER};
//Yes No
const tPanel panel_Yes = {(uptr)touchYes,"YES",40+10,60,80,120,PANEL_YES,SCREEN_LOWER};
const tPanel panel_No = {(uptr)touchNo,"NO",200+30,60,80,120,PANEL_NO,SCREEN_LOWER};
const tPanel panel_Yes = {(uptr)touchYes,L"YES",40+10,60,80,120,PANEL_YES,SCREEN_LOWER};
const tPanel panel_No = {(uptr)touchNo,L"NO",200+30,60,80,120,PANEL_NO,SCREEN_LOWER};
//Quit
const tPanel panel_Quit = {(uptr)touchQuit,"Quit",80+20,60,160,120,PANEL_QUIT,SCREEN_LOWER};
const tPanel panel_Quit = {(uptr)touchQuit,L"Quit",80+20,60,160,120,PANEL_QUIT,SCREEN_LOWER};
//上画面
//デバグ用
//エラー表示
const tPanel panel_Error = {NULL_PTR,NULL_STR,LOC_CONF_X,LOC_CONF_Y,LOC_CONF_W,LOC_CONF_H,PANEL_ERROR,SCREEN_UPPER};
const tMessage mess_Title_Err = {"title",10,10,COLOR_RED,8,MESSAGE_ERROR_TITLE,PANEL_ERROR};
const tMessage mess_Info_Err = {"info",10,22,COLOR_RED,8,MESSAGE_ERROR_INFO,PANEL_ERROR};
const tMessage mess_Info2_Err = {"info2",10,40,COLOR_RED,8,MESSAGE_ERROR_INFO2,PANEL_ERROR};
const tMessage mess_Info3_Err = {"info3",10,50,COLOR_RED,8,MESSAGE_ERROR_INFO3,PANEL_ERROR};
const tMessage mess_Title_Err = {L"title",10,10,COLOR_RED,8,MESSAGE_ERROR_TITLE,PANEL_ERROR};
const tMessage mess_Info_Err = {L"info",10,22,COLOR_RED,8,MESSAGE_ERROR_INFO,PANEL_ERROR};
const tMessage mess_Info2_Err = {L"info2",10,40,COLOR_RED,8,MESSAGE_ERROR_INFO2,PANEL_ERROR};
const tMessage mess_Info3_Err = {L"info3",10,50,COLOR_RED,8,MESSAGE_ERROR_INFO3,PANEL_ERROR};
//成功
const tPanel panel_Success = {NULL_PTR,NULL_STR,LOC_CONF_X,LOC_CONF_Y,LOC_CONF_W,LOC_CONF_H,PANEL_SUCCESS,SCREEN_UPPER};
const tMessage mess_Title_Suc = {"title",10,10,COLOR_GREEN,8,MESSAGE_SUCCESS_TITLE,PANEL_SUCCESS};
const tMessage mess_Info_Suc = {"info",10,40,COLOR_WHITE,8,MESSAGE_SUCCESS_INFO,PANEL_SUCCESS};
const tMessage mess_Info2_Suc = {"info2",10,50,COLOR_WHITE,8,MESSAGE_SUCCESS_INFO2,PANEL_SUCCESS};
const tMessage mess_Title_Suc = {L"title",10,10,COLOR_GREEN,8,MESSAGE_SUCCESS_TITLE,PANEL_SUCCESS};
const tMessage mess_Info_Suc = {L"info",10,40,COLOR_WHITE,8,MESSAGE_SUCCESS_INFO,PANEL_SUCCESS};
const tMessage mess_Info2_Suc = {L"info2",10,50,COLOR_WHITE,8,MESSAGE_SUCCESS_INFO2,PANEL_SUCCESS};
//実行確認
const tPanel panel_Confirm = {NULL_PTR,NULL_STR,LOC_CONF_X,LOC_CONF_Y,LOC_CONF_W,LOC_CONF_H,PANEL_CONFIRM,SCREEN_UPPER};
const tMessage mess_conf_Title = {"title",10,10,COLOR_YELLO,8,MESSAGE_CONFIRM_TITLE,PANEL_CONFIRM};
const tMessage mess_conf_Msg = {"Do you execute?",10,40,COLOR_WHITE,8,MESSAGE_CONFIRM_MSG,PANEL_CONFIRM};
const tMessage mess_conf_Title = {L"title",10,10,COLOR_YELLO,8,MESSAGE_CONFIRM_TITLE,PANEL_CONFIRM};
const tMessage mess_conf_Msg = {L"Do you execute?",10,40,COLOR_WHITE,8,MESSAGE_CONFIRM_MSG,PANEL_CONFIRM};
//トップメニュー
const tPanel panel_topmenu_help = {NULL_PTR,NULL_STR,LOC_CONF_X,LOC_CONF_Y,LOC_CONF_W,LOC_CONF_H,PANEL_TOPMENU,SCREEN_UPPER};
const tMessage mess_topmenu_help_read = {"[Backup] Card -> SD",10,4,COLOR_WHITE,8,MESSAGE_TOPMENU_HELP_READ,PANEL_TOPMENU};
const tMessage mess_topmenu_help_notread = {"[Backup] is Invalid",10,4,COLOR_RED,8,MESSAGE_TOPMENU_HELP_READ,PANEL_TOPMENU};
const tMessage mess_topmenu_help_read = {L"[Backup] Card -> SD",10,4,COLOR_WHITE,8,MESSAGE_TOPMENU_HELP_READ,PANEL_TOPMENU};
const tMessage mess_topmenu_help_notread = {L"[Backup] is Invalid",10,4,COLOR_RED,8,MESSAGE_TOPMENU_HELP_READ,PANEL_TOPMENU};
//const tMessage mess_topmenu_help_write = {"[Restore] bkup -> Card",10,16,COLOR_WHITE,8,MESSAGE_TOPMENU_HELP_WRITE,PANEL_TOPMENU};
//const tMessage mess_topmenu_help_notwrite = {"[Restore] is Invalid",10,16,COLOR_RED,8,MESSAGE_TOPMENU_HELP_WRITE,PANEL_TOPMENU};
//const tMessage mess_topmenu_help_end = {"[End] return to SystemMenu",10,28,COLOR_WHITE,8,MESSAGE_TOPMENU_HELP_END,PANEL_TOPMENU};
const tMessage mess_topmenu_help_operate = {"touch below",10,48,COLOR_GREEN,8,MESSAGE_TOPMENU_HELP_OPERATE,PANEL_TOPMENU};
const tMessage mess_topmenu_help_operate = {L"touch below",10,48,COLOR_GREEN,8,MESSAGE_TOPMENU_HELP_OPERATE,PANEL_TOPMENU};
//ログ表示
const tPanel panel_dbglog = {NULL_PTR,NULL_STR,LOC_LOG_X,LOC_LOG_Y,LOC_LOG_W,LOC_LOG_H,PANEL_DBGLOG,SCREEN_UPPER};
@ -235,10 +237,10 @@ const tMemo memo_dbglog = {LOG_MAX,10,10,COLOR_WHITE,8,MEMO_DBGLOG,PANEL_DBGLOG}
#define LOC_TITL_H 50
#define FONT_SIZE_PRODUCT 10
const tPanel panel_title = {NULL_PTR,NULL_STR,LOC_TITL_X,LOC_TITL_Y,LOC_TITL_W,LOC_TITL_H,PANEL_TITLE,SCREEN_UPPER};
const tMessage mess_title = {"title",0,0,COLOR_WHITE,FONT_SIZE_TITLE,MESSAGE_TITLE,PANEL_TITLE};
const tMessage mess_product = {"product",0,LOC_TITL_H - 22,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_PRODUCT,PANEL_TITLE};
const tMessage mess_title = {L"title",0,0,COLOR_WHITE,FONT_SIZE_TITLE,MESSAGE_TITLE,PANEL_TITLE};
const tMessage mess_product = {L"product",0,LOC_TITL_H - 22,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_PRODUCT,PANEL_TITLE};
//const tMessage mess_product2 = {"product2",0,LOC_TITL_H - 10,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_PRODUCT2,PANEL_TITLE};
const tMessage mess_version = {"version",LOC_TITL_W-FONT_SIZE_PRODUCT*6,FONT_SIZE_TITLE+2,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_VERSION,PANEL_TITLE};
const tMessage mess_version = {L"version",LOC_TITL_W-FONT_SIZE_PRODUCT*6,FONT_SIZE_TITLE+2,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_VERSION,PANEL_TITLE};
#define LOC_MESS_X 20
#define LOC_MESS_W (400 - LOC_MESS_X*2)
@ -249,48 +251,48 @@ const tMessage mess_version = {"version",LOC_TITL_W-FONT_SIZE_PRODUCT*6,FONT_SIZ
#define FONT_SIZE 10
#define STR_LINE(ln) (FONT_SIZE + 2)*ln
const tPanel panel_menu = {NULL_PTR,NULL_STR,LOC_MESS_X,LOC_MESS_Y,LOC_MESS_W,LOC_MESS_H,PANEL_MENU,SCREEN_UPPER};
const tMessage mess_menu_read = {"[Export] Write to SD",10,STR_LINE(1),COLOR_WHITE,FONT_SIZE,MESSAGE_MENU_READ,PANEL_MENU};
const tMessage mess_menu_read = {L"[Export] Write to SD",10,STR_LINE(1),COLOR_WHITE,FONT_SIZE,MESSAGE_MENU_READ,PANEL_MENU};
//const tMessage mess_menu_write = {"[Restore] restore to Card",10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_MENU_WRITE,PANEL_MENU};
//const tMessage mess_menu_end = {"[End] close this apprication",10,STR_LINE(3),COLOR_WHITE,FONT_SIZE,MESSAGE_MENU_END,PANEL_MENU};
const tMessage mess_menu_operate = {"touch below",10,STR_LINE(4),COLOR_GREEN,FONT_SIZE,MESSAGE_MENU_OPERATE,PANEL_MENU};
const tMessage mess_bkuperr = {"SD error",10,STR_LINE(6),COLOR_RED,FONT_SIZE,MESSAGE_MENU_ERROR,PANEL_MENU};
const tMessage mess_carderr = {"CARD error",10,STR_LINE(7),COLOR_YELLO,FONT_SIZE,MESSAGE_MENU_CAUTION,PANEL_MENU};
const tMessage mess_menu_operate = {L"touch below",10,STR_LINE(4),COLOR_GREEN,FONT_SIZE,MESSAGE_MENU_OPERATE,PANEL_MENU};
const tMessage mess_bkuperr = {L"SD error",10,STR_LINE(6),COLOR_RED,FONT_SIZE,MESSAGE_MENU_ERROR,PANEL_MENU};
const tMessage mess_carderr = {L"CARD error",10,STR_LINE(7),COLOR_YELLO,FONT_SIZE,MESSAGE_MENU_CAUTION,PANEL_MENU};
//const tMessage mess_debug = {"Crush Mode",10,STR_LINE(3),COLOR_YELLO,FONT_SIZE,MESSAGE_MENU_DEBUG,PANEL_MENU};
//Backup
//const tPanel panel_bkup = {NULL_PTR,NULL_STR,LOC_LOG_X,LOC_LOG_Y,LOC_LOG_W,LOC_LOG_H,PANEL_BKUP,SCREEN_UPPER};
const tPanel panel_bkup = {NULL_PTR,NULL_STR,LOC_MESS_X,LOC_MESS_Y,LOC_MESS_W,LOC_MESS_H,PANEL_BKUP,SCREEN_UPPER};
const tMessage mess_quit_operate = {"touch [Quit],or Push B",10,STR_LINE(4),COLOR_SKY,FONT_SIZE,MESSAGE_QUIT_OPERATE,PANEL_BKUP};
const tMessage mess_conf = {"Do you execute?",10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_CONF,PANEL_BKUP};
const tMessage mess_result = {"result",10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_RESULT,PANEL_BKUP};
const tMessage mess_operate = {"touch below",10,STR_LINE(4),COLOR_GREEN,FONT_SIZE,MESSAGE_OPERATE,PANEL_BKUP};
const tMessage mess_status = {"status",10,STR_LINE(7),COLOR_WHITE,FONT_SIZE,MESSAGE_STATUS,PANEL_BKUP};
const tMessage mess_count = {"count",10,STR_LINE(8),COLOR_WHITE,FONT_SIZE,MESSAGE_COUNT,PANEL_BKUP};
const tMessage mess_count2 = {"count2",10,STR_LINE(9),COLOR_GREEN,FONT_SIZE,MESSAGE_COUNT2,PANEL_BKUP};
const tMessage mess_quit_operate = {L"touch [Quit],or Push B",10,STR_LINE(4),COLOR_SKY,FONT_SIZE,MESSAGE_QUIT_OPERATE,PANEL_BKUP};
const tMessage mess_conf = {L"Do you execute?",10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_CONF,PANEL_BKUP};
const tMessage mess_result = {L"result",10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_RESULT,PANEL_BKUP};
const tMessage mess_operate = {L"touch below",10,STR_LINE(4),COLOR_GREEN,FONT_SIZE,MESSAGE_OPERATE,PANEL_BKUP};
const tMessage mess_status = {L"status",10,STR_LINE(7),COLOR_WHITE,FONT_SIZE,MESSAGE_STATUS,PANEL_BKUP};
const tMessage mess_count = {L"count",10,STR_LINE(8),COLOR_WHITE,FONT_SIZE,MESSAGE_COUNT,PANEL_BKUP};
const tMessage mess_count2 = {L"count2",10,STR_LINE(9),COLOR_GREEN,FONT_SIZE,MESSAGE_COUNT2,PANEL_BKUP};
//挿抜発生時
//const tPanel panel_insexit = {NULL_PTR,NULL_STR,LOC_LOG_X,LOC_LOG_Y,LOC_LOG_W,LOC_LOG_H,PANEL_INSEXIT,SCREEN_UPPER};
const tPanel panel_insexit = {NULL_PTR,NULL_STR,LOC_MESS_X,LOC_MESS_Y,LOC_MESS_W,LOC_MESS_H,PANEL_INSEXIT,SCREEN_UPPER};
const tMessage mess_insexit = {"device insert or pull out is detected",10,STR_LINE(3),COLOR_RED,8,MESSAGE_INSEXT_1,PANEL_INSEXIT};
const tMessage mess_insexit2 = {"return to top menu",10,STR_LINE(5),COLOR_WHITE,8,MESSAGE_INSEXT_2,PANEL_INSEXIT};
const tMessage mess_insexit3 = {"please touch or push B",10,STR_LINE(6),COLOR_WHITE,8,MESSAGE_INSEXT_3,PANEL_INSEXIT};
const tMessage mess_insexit = {L"device insert or pull out is detected",10,STR_LINE(3),COLOR_RED,8,MESSAGE_INSEXT_1,PANEL_INSEXIT};
const tMessage mess_insexit2 = {L"return to top menu",10,STR_LINE(5),COLOR_WHITE,8,MESSAGE_INSEXT_2,PANEL_INSEXIT};
const tMessage mess_insexit3 = {L"please touch or push B",10,STR_LINE(6),COLOR_WHITE,8,MESSAGE_INSEXT_3,PANEL_INSEXIT};
//削除確認
//const tPanel panel_delconf = {NULL_PTR,NULL_STR,LOC_CONF_X-10,LOC_CONF_Y,LOC_CONF_W+10,LOC_CONF_H*2,PANEL_DELCONF,SCREEN_UPPER};
const tPanel panel_delconf = {NULL_PTR,NULL_STR,LOC_MESS_X,LOC_MESS_Y-36,LOC_MESS_W,LOC_MESS_H,PANEL_DELCONF,SCREEN_UPPER};
const tMessage mess_delconf_Title = {" *** DELETE *** ",10,10,COLOR_YELLO,16,MESSAGE_DELCONF_TITLE,PANEL_DELCONF};
const tMessage mess_delconf_Msg = {" caution!",10,50,COLOR_YELLO,12,MESSAGE_DELCONF_MSG,PANEL_DELCONF};
const tMessage mess_delconf_Msg2 = {"this is delete data on SD",10,70,COLOR_YELLO,12,MESSAGE_DELCONF_MSG2,PANEL_DELCONF};
const tMessage mess_delconf_Msg3 = {"Do you execute?",10,90,COLOR_YELLO,12,MESSAGE_DELCONF_MSG3,PANEL_DELCONF};
const tMessage mess_delconf_Title = {L" *** DELETE *** ",10,10,COLOR_YELLO,16,MESSAGE_DELCONF_TITLE,PANEL_DELCONF};
const tMessage mess_delconf_Msg = {L" caution!",10,50,COLOR_YELLO,12,MESSAGE_DELCONF_MSG,PANEL_DELCONF};
const tMessage mess_delconf_Msg2 = {L"this is delete data on SD",10,70,COLOR_YELLO,12,MESSAGE_DELCONF_MSG2,PANEL_DELCONF};
const tMessage mess_delconf_Msg3 = {L"Do you execute?",10,90,COLOR_YELLO,12,MESSAGE_DELCONF_MSG3,PANEL_DELCONF};
nn::os::LightEvent stopEvnt(true);
char scr_ver[16];
char scr_err[32];
char scr_debug[32];
wchar_t scr_ver[16];
wchar_t scr_err[32];
wchar_t scr_debug[32];
//menu
bool ScrInitialize(uptr heap,u32 size)
{
@ -364,9 +366,10 @@ bool ScrInitialize(uptr heap,u32 size)
gui.MessSet(&mess_insexit2);
gui.MessSet(&mess_insexit3);
gui.MemoSet(&memo_dbglog);
gui.MemoEffective(MESSAGE_PRODUCT);
//gui.MemoSet(&memo_dbglog);
//gui.MemoEffective(MESSAGE_PRODUCT);
gui.MessEffective(MESSAGE_ERROR_TITLE);
gui.MessEffective(MESSAGE_ERROR_INFO);
gui.MessEffective(MESSAGE_ERROR_INFO2);
@ -393,11 +396,11 @@ bool ScrInitialize(uptr heap,u32 size)
gui.MessEffective(MESSAGE_INSEXT_3);
gui.MessEffective(MESSAGE_TITLE);
gui.MessEffective(MESSAGE_VERSION);
gui.MemoEffective(MEMO_DBGLOG);
// gui.MemoEffective(MEMO_DBGLOG);
gui.PanelLineStyle(PANEL_DELCONF,COLOR_YELLO);
sprintf(scr_ver,"ver %.2f",VERSION);
swprintf(scr_ver,10,L"ver %.2f",VERSION);
gui.MessStr(MESSAGE_VERSION,scr_ver);
gui.MessStr(MESSAGE_MENU_CAUTION,scr_err);
gui.MessStr(MESSAGE_MENU_ERROR,scr_err);
@ -471,15 +474,16 @@ void scr_TopMenuDbg(bool formatted,bool insertted)//
//プロダクトコード
//引数:カード、拡張セーブに記録されたもの
char scr_pcode[32];
wchar_t scr_pcode[32];
void scr_PrdCode(char *s)
{
strcpy(scr_pcode,"CARD : ");
if (s[0]==0) strcat(scr_pcode,"----");
else strcat(scr_pcode,s);
wcscpy(scr_pcode,L"CARD : ");
if (s[0]==0) wcscat(scr_pcode,L"----");
else mbstowcs(&scr_pcode[7],s,30);
gui.MessStr(MESSAGE_PRODUCT,scr_pcode);
}
/*
char scr_pcode2[64];
void scr_PrdCodeEx(char *s)
@ -512,7 +516,7 @@ void scr_TopMenu(bool formatted,bool inserted,bool sdins,int err)
u32 mask = 0;
mask |= (nn::hid::BUTTON_LEFT | nn::hid::BUTTON_X);//LEFT+X = Delete 有効
gui.MessStr(MESSAGE_TITLE," < CTR Card Savedata Exporter >");
gui.MessStr(MESSAGE_TITLE,L" < CTR Card Savedata Exporter >");
gui.MessEffective(MESSAGE_MENU_ERROR,false,false);
gui.MessEffective(MESSAGE_MENU_CAUTION,false,false);
@ -528,19 +532,19 @@ void scr_TopMenu(bool formatted,bool inserted,bool sdins,int err)
if (inserted == false)
{
strcpy(scr_err,"Please Insert Card");
wcscpy(scr_err,L"Please Insert Card");
gui.MessEffective(MESSAGE_MENU_CAUTION);
}else
if (sdins == false)
{
strcpy(scr_err,"SD protected or not Insert");
wcscpy(scr_err,L"SD protected or not Insert");
gui.MessEffective(MESSAGE_MENU_CAUTION);
}else{
if (err & SDATA_ERRPUT_MEDIA) i = ERC_MEDIA + ERC_DEV_CARD;//バックアップがない
else i = ERC_DEV_OTHER;//不明
sprintf(scr_err,"ERROR %d",i);
if (err & SDATA_ERRPUT_MEDIA) i = ERC_MEDIA + TGT_CARD;//バックアップがない
else i = ERC_EXEC;//不明
swprintf(scr_err,12,L"ERROR %d",i);
gui.MessEffective(MESSAGE_MENU_ERROR);
}
}
@ -581,7 +585,7 @@ void scr_Backup()
{
scr_evnt = EVNT_NONE;
gui.PanelLineStyle(PANEL_BKUP,COLOR_SKY);
gui.MessStr(MESSAGE_TITLE," --- Backup Card Savedata ---");
gui.MessStr(MESSAGE_TITLE,L" --- Backup Card Savedata ---");
gui.PanelEffective(PANEL_TITLE);
ClearBkupMess();
gui.Draw();
@ -600,7 +604,7 @@ void scr_Restore()
{
scr_evnt = EVNT_NONE;
gui.PanelLineStyle(PANEL_BKUP,COLOR_PARPL);
gui.MessStr(MESSAGE_TITLE,"--- Restore Card Savedata ---");
gui.MessStr(MESSAGE_TITLE,L"--- Restore Card Savedata ---");
gui.PanelEffective(PANEL_TITLE);
ClearBkupMess();//backupと同じパネルを使う
gui.Draw();
@ -615,7 +619,7 @@ void scr_RestoreYesNo()
}
void scr_Status(char *s,eColor col)
void scr_Status(wchar_t *s,eColor col)
{
gui.MessCol(MESSAGE_STATUS,col);
gui.MessStr(MESSAGE_STATUS,s);
@ -623,7 +627,7 @@ void scr_Status(char *s,eColor col)
gui.Draw();
}
void scr_ResultQuit(char *s,eColor col)
void scr_ResultQuit(wchar_t *s,eColor col)
{
gui.MessCol(MESSAGE_RESULT,col);
gui.MessStr(MESSAGE_RESULT,s);
@ -642,11 +646,11 @@ void scr_InsExitQuit()
}
// カウント/MAX 表示
char str_Counter[128];
char str_Counter2[128];
wchar_t str_Counter[128];
wchar_t str_Counter2[128];
void scr_CountPerMax(int ct,int max)
{
sprintf(str_Counter,"%d / %d",ct,max);
swprintf(str_Counter,16,L"%d / %d",ct,max);
gui.MessStr(MESSAGE_COUNT,str_Counter);
gui.MessEffective(MESSAGE_COUNT);
gui.Draw();
@ -658,7 +662,7 @@ void scr_CountPerMax2(int ct,int max,int total)
if (total == -1) str_Counter2[0]=0;
else if (total != 0){
// gui.MessCol(MESSAGE_COUNT2,COLOR_WHITE);
sprintf(str_Counter2,"total size %d",total);
swprintf(str_Counter2,20,L"total size %d",total);
}else{
// gui.MessCol(MESSAGE_COUNT2,COLOR_YELLO);
int i;
@ -674,7 +678,7 @@ void scr_CountPerMax2(int ct,int max,int total)
}
void scr_MessOnCount2(char *str)
void scr_MessOnCount2(wchar_t *str)
{
// gui.MessCol(MESSAGE_COUNT2,COLOR_YELLO);
gui.MessStr(MESSAGE_COUNT2,str);
@ -682,7 +686,7 @@ void scr_MessOnCount2(char *str)
gui.Draw();
}
void scr_MessOnCount(char *str)
void scr_MessOnCount(wchar_t *str)
{
// gui.MessCol(MESSAGE_COUNT2,COLOR_YELLO);
gui.MessStr(MESSAGE_COUNT,str);
@ -691,7 +695,7 @@ void scr_MessOnCount(char *str)
}
/*
//実行確認
void scr_ConfirmDbg(char *str)
{
@ -701,7 +705,6 @@ void scr_ConfirmDbg(char *str)
YesNo();
}
//エラー表示とQuitボタン
void scr_ErrorQuitDbg(tColStr **s)
{
@ -731,26 +734,9 @@ void scr_SuccessQuitDbg(tColStr **s)
gui.PanelEffective(PANEL_SUCCESS);
Quit();
}
*/
//デバッグログ
void scr_DgbLog(cStrLst *p)
{
gui.PanelLineStyle(PANEL_DBGLOG,COLOR_BLUE);
for (int i=0;i<p->getpos()+1;i++)gui.MemoStr(MEMO_DBGLOG,p->line(i),i);
gui.PanelEffective(PANEL_DBGLOG);
gui.Draw();
}
int ScrDbgLogGetMax()
{
return LOG_MAX;
}
void scr_Draw()
{

View File

@ -87,28 +87,29 @@ public:
bool ScrInitialize(uptr heap,u32 size);
void ScrFinalize();
void ScrClr();
int ScrDbgLogGetMax();
//int ScrDbgLogGetMax();
void ScrStep();
void scr_TopMenuDbg(bool formatted,bool insertted);
//void scr_TopMenuDbg(bool formatted,bool insertted);
//void scr_SuccessQuitDbg(tColStr **s);
//void scr_ErrorQuitDbg(tColStr **s);
//void scr_ConfirmDbg(char *str);
//void scr_DgbLog(cStrLst *p);
void scr_TopMenu(bool formatted,bool inserted,bool sdins,int err);
void scr_ErrorQuitDbg(tColStr **s);
void scr_SuccessQuitDbg(tColStr **s);
void scr_ConfirmDbg(char *str);
void scr_DgbLog(cStrLst *p);
void scr_BackupYesNo();
void scr_Backup();
void scr_RestoreYesNo();
void scr_Restore();
void scr_InsExitQuit();
void scr_Status(char *s,eColor col);
void scr_ResultQuit(char *s,eColor col);
void scr_Status(wchar_t *s,eColor col);
void scr_ResultQuit(wchar_t *s,eColor col);
void scr_CountPerMax(int ct,int max);
void scr_CountPerMax2(int ct,int max,int total);
void scr_PrdCode(char *s);
void scr_PrdCodeEx(char *s);
//void scr_PrdCodeEx(char *s);
void scr_DelConf();
void scr_MessOnCount2(char *str);
void scr_MessOnCount(char *str);
void scr_MessOnCount2(wchar_t *str);
void scr_MessOnCount(wchar_t *str);
void scr_Draw();
void scr_GetEvnt();