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

This commit is contained in:
mizu 2012-09-21 05:35:56 +00:00
parent 028bc99c35
commit 7ef1a1e6eb
20 changed files with 2063 additions and 1998 deletions

View File

@ -28,6 +28,7 @@ CTR_APPTYPE = BOTH
#SDにセーブする場合はmembak -> exsave 変更
SOURCES[] =
./source/main.cpp
./source/sub.cpp
./source/screen/screen.cpp
../../common/savefile/savedata.cpp
../../common/savefile/membak.cpp
@ -70,7 +71,8 @@ CTR_BANNER_SPEC = banner_null_icon.bsf
#Cia バージョン:マスタリング毎に更新すること
#メジャーはrsfで指定(Remasterversion)
#micro の上限は15(4bit)
MAKECIAFLAGS = -minor 1 -micro 1
#latest release 2.1.3 :2012/9/21 ver 2.0
MAKECIAFLAGS = -minor 1 -micro 3
include $(ROOT_OMAKE)/modulerules

View File

@ -5,7 +5,7 @@ BasicInfo:
Logo : Nintendo
# CompanyCode: "00"
ProductCode : "CTR-N-22NA"
MediaSize : 512MB
# MediaSize : 2G
TitleInfo:
# Category: 0x0010
@ -15,10 +15,10 @@ TitleInfo:
Rom:
HostRoot : romfiles
SaveDataSize: 256MB
SaveDataSize: 20MB
CardInfo:
CardDevice: None
# CardDevice: None
MediaType: Card2
AccessControlInfo:

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,13 @@
//デバグ用
#ifndef _MAIN_H_
#define _MAIN_H_
//強制SD
//#define CSM_FLAG_FORCE_SD 1
//デバグフラグ
//(有効時)
// 画面左上に"DEBUG"の文字
// SD抜けチェック無効 .. BreakしてPC確認するとき面倒なので
//#define CSM_FLAG_DEBUG 1
//一時保存先にSDも使う総サイズがメモリに納まらない場合 .. Card2
//#define CSM_FLAG_USE_SD 1
#ifdef CSM_FLAG_USE_SD
#define CSM_FLAG_FORCE_SD 1 //強制SD使用
#endif

View File

@ -12,6 +12,11 @@
Gui gui;
u8 scr_evnt;
//タイトル用ワーク
//サイズオーバ注意
tChar wS_Title[32];
//eColor wC_Title;
enum{
//PANEL_END,
PANEL_ERROR,
@ -27,7 +32,7 @@ PANEL_CONFIRM,
PANEL_DELCONF,
PANEL_MENU,
PANEL_BKUP,
PANEL_INSEXIT,
PANEL_INSEJECT,
PANEL_DBGLOG
};
@ -48,22 +53,16 @@ MESSAGE_DELCONF_TITLE,
MESSAGE_DELCONF_MSG,
MESSAGE_DELCONF_MSG2,
MESSAGE_DELCONF_MSG3,
//MESSAGE_TOPMENU_HELP_TITLE,
MESSAGE_TOPMENU_HELP_READ,
MESSAGE_TOPMENU_HELP_WRITE,
MESSAGE_TOPMENU_HELP_END,
MESSAGE_TOPMENU_HELP_OPERATE,
MESSAGE_TITLE,
MESSAGE_MENU_READ,
MESSAGE_MENU_WRITE,
//MESSAGE_MENU_END,
MESSAGE_MENU_OPERATE,
MESSAGE_MENU_CAUTION,
MESSAGE_MENU_ERROR,
MESSAGE_MENU_DEBUG,
MESSAGE_INSEXT_1,
MESSAGE_INSEXT_2,
MESSAGE_INSEXT_3,
MESSAGE_INSEJC_1,
MESSAGE_INSEJC_2,
MESSAGE_INSEJC_3,
MESSAGE_OPERATE,
MESSAGE_RESULT,
MESSAGE_QUIT_OPERATE,
@ -165,121 +164,111 @@ void touchQuit(u32 pos NN_IS_UNUSED_VAR)
#define LOG_MAX 10
// -------------------------------------------------- コンポーネント設計
//下画面
#ifdef USE_WCHAR
/*
tChar* S_Backup = L"読込";
tChar* S_Restore = L"書込";
tChar* S_Yes = L"はい";
tChar* S_No = L"いいえ";
tChar* S_Quit = L"戻る";
tChar* S_Space = L" ";
tChar* S_Execute = L"実行しますか?";
tChar* S_HelpBackup = L"[読込] カードから読む";
tChar* S_HelpRestore = L"[書込] カードに書く";
tChar* S_Touch = L"タッチで実行します";
tChar* S_Version = L"";
tChar* S_QuitB = L"タッチかBボタンで戻ります";
tChar* S_Insexit = L"デバイスの挿抜を検知しました";
tChar* S_RetTop = L"開始画面に戻ります";
tChar* S_Del = L" ** 削除 ** ";
tChar* S_Del2 = L"    注意";
tChar* S_Del3 = L"読出したデータを削除します";
tChar* S_Title = L" <カードセーブ移行>";
tChar* S_InsertCard = L"カードを挿入して下さい";
tChar* S_TitleBkup = L" -- カードから読込 --";
tChar* S_TitleRestore = L" -- カードへ書込 --";
*/
tChar* S_Backup = L"Backup";
tChar* S_Restore = L"Restore";
tChar* S_Yes = L"YES";
tChar* S_No = L"NO";
tChar* S_Quit = L"Quit";
tChar* S_Space = L" ";
tChar* S_Execute = L"Do you execute?";
tChar* S_HelpBackup = L"[Backup] read from Card";
tChar* S_HelpRestore = L"[Restore] write to Card";
tChar* S_Touch = L"Touch below";
tChar* S_Version = L"version";
tChar* S_QuitB = L"touch [Quit] or push B";
tChar* S_Insexit = L"device insert or pull out is detected";
tChar* S_RetTop = L"return to top menu";
tChar* S_Del = L" *** DELETE *** ";
tChar* S_Del2 = L" caution!";
tChar* S_Del3 = L"this is delete backup";
tChar* S_Title = L" < CTR Card Savedata Mover >";
tChar* S_InsertCard = L"Please Insert Card";
tChar* S_TitleBkup = L" --- Backup Card Savedata ---";
tChar* S_TitleRestore = L"--- Restore Card Savedata ---";
//表示文字列
enum {//index of message string
I_Backup,
I_Restore,
I_Yes,
I_No,
I_Quit,
I_Space,
I_Execute,
I_HelpBackup,
I_HelpRestore,
I_Touch,
I_Version,
I_QuitB,
I_Inseject,
I_RetTop,
I_InsejectSD,
I_Restart1,
I_Restart2,
I_Del,
I_Del2,
I_Del3,
I_Title,
I_TitleCp,
I_InsertCard,
I_TitleBkup,
I_TitleRestore,
I_CardChk,
I_EndNum
};
#else
tChar* S_Backup = "Backup";
tChar* S_Restore = "Restore";
tChar* S_Yes = "YES";
tChar* S_No = "NO";
tChar* S_Quit = "Quit";
tChar* S_Space = " ";
tChar* S_Execute = "Do you execute?";
tChar* S_HelpBackup = "[Backup] read from Card";
tChar* S_HelpRestore = "[Restore] write to Card";
tChar* S_Touch = "Touch below";
tChar* S_Version = "version";
tChar* S_QuitB = "touch [Quit] or push B";
tChar* S_Insexit = "device insert or pull out is detected";
tChar* S_RetTop = "return to top menu";
tChar* S_Del = " *** DELETE *** ";
tChar* S_Del2 = " caution!";
tChar* S_Del3 = "this is delete backup";
tChar* S_Title = " < CTR Card Savedata Mover >";
tChar* S_InsertCard = "Please Insert Card";
tChar* S_TitleBkup = " --- Backup Card Savedata ---";
tChar* S_TitleRestore = "--- Restore Card Savedata ---";
#endif
tChar* S_StringsJp[I_EndNum] = {
L"読込",
L"書込",
L"はい",
L"いいえ",
L"戻る",
L" ",
L"実行しますか?",
L"[読込] カードから読む",
L"[書込] カードに書く",
L"タッチで実行します",
L"",
L"タッチかBボタンで戻ります",
L"カードの挿抜を検知しました",
L"開始画面に戻ります",
L"SDの挿抜を検知しました",
L"動作中は禁止です",
L"電源OFFからやり直してください",
L" ** 削除 ** ",
L"    注意",
L"読出したデータを削除します",
L"   <カードセーブ移行>",
L"   - コピーモード -",
L"カードを挿入して下さい",
L" -- カードから読込 --",
L" -- カードへ書込 --",
L" 確認してます"
};
tChar* S_Strings[I_EndNum] = {
L"Backup",
L"Restore",
L"YES",
L"NO",
L"Quit",
L" ",
L"Do you execute?",
L"[Backup] read from Card",
L"[Restore] write to Card",
L"Touch below",
L"version",
L"touch [Quit] or push B",
L"CARD insert or pull out is detected",
L"return to top menu",
L"SD insert or pull out is ",
L"prohibited during operation",
L" turn off the power and restart",
L" *** DELETE *** ",
L" caution!",
L"this is delete backup",
L" < CTR Card Savedata Mover >",
L" - Copy mode -",
L"Please Insert Card",
L" --- Backup Card Savedata ---",
L"--- Restore Card Savedata ---",
L"Checking"
};
//文字列ポインタ格納
tChar* pS_Str[I_EndNum];
//Top Menu
const tPanel panel_Read = {(uptr)touchRead,S_Backup,80+20,30,160,80,PANEL_READ,SCREEN_LOWER};
const tPanel panel_Write = {(uptr)touchWrite,S_Restore,80+20,130,160,80,PANEL_WRITE,SCREEN_LOWER};
const tPanel panel_Read = {(uptr)touchRead,NULL_STR,80+20,30,160,80,PANEL_READ,SCREEN_LOWER};
const tPanel panel_Write = {(uptr)touchWrite,NULL_STR,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,S_Yes,40+10,60,80,120,PANEL_YES,SCREEN_LOWER};
const tPanel panel_No = {(uptr)touchNo,S_No,200+30,60,80,120,PANEL_NO,SCREEN_LOWER};
const tPanel panel_Yes = {(uptr)touchYes,NULL_STR,40+10,60,80,120,PANEL_YES,SCREEN_LOWER};
const tPanel panel_No = {(uptr)touchNo,NULL_STR,200+30,60,80,120,PANEL_NO,SCREEN_LOWER};
//Quit
const tPanel panel_Quit = {(uptr)touchQuit,S_Quit,80+20,60,160,120,PANEL_QUIT,SCREEN_LOWER};
const tPanel panel_Quit = {(uptr)touchQuit,NULL_STR,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 = {S_Space,10,10,COLOR_RED,8,MESSAGE_ERROR_TITLE,PANEL_ERROR};
const tMessage mess_Info_Err = {S_Space,10,22,COLOR_RED,8,MESSAGE_ERROR_INFO,PANEL_ERROR};
const tMessage mess_Info2_Err = {S_Space,10,40,COLOR_RED,8,MESSAGE_ERROR_INFO2,PANEL_ERROR};
const tMessage mess_Info3_Err = {S_Space,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 = {S_Space,10,10,COLOR_GREEN,8,MESSAGE_SUCCESS_TITLE,PANEL_SUCCESS};
const tMessage mess_Info_Suc = {S_Space,10,40,COLOR_WHITE,8,MESSAGE_SUCCESS_INFO,PANEL_SUCCESS};
const tMessage mess_Info2_Suc = {S_Space,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 = {S_Space,10,10,COLOR_YELLO,8,MESSAGE_CONFIRM_TITLE,PANEL_CONFIRM};
const tMessage mess_conf_Msg = {S_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 = {S_HelpBackup,10,4,COLOR_WHITE,8,MESSAGE_TOPMENU_HELP_READ,PANEL_TOPMENU};
//const tMessage mess_topmenu_help_write = {S_HelpRestore,10,16,COLOR_WHITE,8,MESSAGE_TOPMENU_HELP_WRITE,PANEL_TOPMENU};
//const tMessage mess_topmenu_help_operate = {S_Touch,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};
const tMemo memo_dbglog = {LOG_MAX,10,10,COLOR_WHITE,8,MEMO_DBGLOG,PANEL_DBGLOG};
*/
//通常時
//タイトル
@ -290,10 +279,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 = {S_Space,0,0,COLOR_WHITE,FONT_SIZE_TITLE,MESSAGE_TITLE,PANEL_TITLE};
const tMessage mess_product = {S_Space,0,LOC_TITL_H - 22,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_PRODUCT,PANEL_TITLE};
const tMessage mess_product2 = {S_Space,0,LOC_TITL_H - 10,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_PRODUCT2,PANEL_TITLE};
const tMessage mess_version = {S_Version,LOC_TITL_W-FONT_SIZE_PRODUCT*6,FONT_SIZE_TITLE+2,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_VERSION,PANEL_TITLE};
const tMessage mess_title = {NULL_STR,0,0,COLOR_WHITE,FONT_SIZE_TITLE,MESSAGE_TITLE,PANEL_TITLE};
const tMessage mess_product = {NULL_STR,0,LOC_TITL_H - 22,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_PRODUCT,PANEL_TITLE};
const tMessage mess_product2 = {NULL_STR,0,LOC_TITL_H - 10,COLOR_WHITE,FONT_SIZE_PRODUCT,MESSAGE_PRODUCT2,PANEL_TITLE};
const tMessage mess_version = {NULL_STR,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)
@ -303,119 +292,98 @@ const tMessage mess_version = {S_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 = {S_HelpBackup,10,STR_LINE(1),COLOR_WHITE,FONT_SIZE,MESSAGE_MENU_READ,PANEL_MENU};
const tMessage mess_menu_write = {S_HelpRestore,10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_MENU_WRITE,PANEL_MENU};
const tMessage mess_menu_operate = {S_Touch,10,STR_LINE(4),COLOR_GREEN,FONT_SIZE,MESSAGE_MENU_OPERATE,PANEL_MENU};
const tMessage mess_bkuperr = {S_Space,10,STR_LINE(6),COLOR_RED,FONT_SIZE,MESSAGE_MENU_ERROR,PANEL_MENU};
const tMessage mess_carderr = {S_Space,10,STR_LINE(7),COLOR_YELLO,FONT_SIZE,MESSAGE_MENU_CAUTION,PANEL_MENU};
const tMessage mess_menu_read = {NULL_STR,10,STR_LINE(1),COLOR_WHITE,FONT_SIZE,MESSAGE_MENU_READ,PANEL_MENU};
const tMessage mess_menu_write = {NULL_STR,10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_MENU_WRITE,PANEL_MENU};
const tMessage mess_menu_operate = {NULL_STR,10,STR_LINE(4),COLOR_GREEN,FONT_SIZE,MESSAGE_MENU_OPERATE,PANEL_MENU};
const tMessage mess_bkuperr = {NULL_STR,10,STR_LINE(6),COLOR_RED,FONT_SIZE,MESSAGE_MENU_ERROR,PANEL_MENU};
const tMessage mess_carderr = {NULL_STR,10,STR_LINE(7),COLOR_YELLO,FONT_SIZE,MESSAGE_MENU_CAUTION,PANEL_MENU};
//Backup
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 = {S_QuitB,10,STR_LINE(4),COLOR_SKY,FONT_SIZE,MESSAGE_QUIT_OPERATE,PANEL_BKUP};
const tMessage mess_conf = {S_Execute,10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_CONF,PANEL_BKUP};
const tMessage mess_result = {S_Space,10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_RESULT,PANEL_BKUP};
const tMessage mess_operate = {S_Touch,10,STR_LINE(4),COLOR_GREEN,FONT_SIZE,MESSAGE_OPERATE,PANEL_BKUP};
const tMessage mess_status = {S_Space,10,STR_LINE(7),COLOR_WHITE,FONT_SIZE,MESSAGE_STATUS,PANEL_BKUP};
const tMessage mess_count = {S_Space,10,STR_LINE(8),COLOR_WHITE,FONT_SIZE,MESSAGE_COUNT,PANEL_BKUP};
const tMessage mess_count2 = {S_Space,10,STR_LINE(9),COLOR_GREEN,FONT_SIZE,MESSAGE_COUNT2,PANEL_BKUP};
const tMessage mess_quit_operate = {NULL_STR,10,STR_LINE(4),COLOR_SKY,FONT_SIZE,MESSAGE_QUIT_OPERATE,PANEL_BKUP};
const tMessage mess_conf = {NULL_STR,10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_CONF,PANEL_BKUP};
const tMessage mess_result = {NULL_STR,10,STR_LINE(2),COLOR_WHITE,FONT_SIZE,MESSAGE_RESULT,PANEL_BKUP};
const tMessage mess_operate = {NULL_STR,10,STR_LINE(4),COLOR_GREEN,FONT_SIZE,MESSAGE_OPERATE,PANEL_BKUP};
const tMessage mess_status = {NULL_STR,10,STR_LINE(7),COLOR_WHITE,FONT_SIZE,MESSAGE_STATUS,PANEL_BKUP};
const tMessage mess_count = {NULL_STR,10,STR_LINE(8),COLOR_WHITE,FONT_SIZE,MESSAGE_COUNT,PANEL_BKUP};
const tMessage mess_count2 = {NULL_STR,10,STR_LINE(9),COLOR_GREEN,FONT_SIZE,MESSAGE_COUNT2,PANEL_BKUP};
//挿抜発生時
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 = {S_Insexit,10,STR_LINE(3),COLOR_RED,8,MESSAGE_INSEXT_1,PANEL_INSEXIT};
const tMessage mess_insexit2 = {S_RetTop,10,STR_LINE(5),COLOR_WHITE,8,MESSAGE_INSEXT_2,PANEL_INSEXIT};
const tMessage mess_insexit3 = {S_QuitB,10,STR_LINE(6),COLOR_WHITE,8,MESSAGE_INSEXT_3,PANEL_INSEXIT};
const tPanel panel_inseject = {NULL_PTR,NULL_STR,LOC_MESS_X,LOC_MESS_Y,LOC_MESS_W,LOC_MESS_H,PANEL_INSEJECT,SCREEN_UPPER};
const tMessage mess_inseject = {NULL_STR,10,STR_LINE(3),COLOR_RED,10,MESSAGE_INSEJC_1,PANEL_INSEJECT};
const tMessage mess_inseject2 = {NULL_STR,10,STR_LINE(5),COLOR_WHITE,10,MESSAGE_INSEJC_2,PANEL_INSEJECT};
const tMessage mess_inseject3 = {NULL_STR,10,STR_LINE(6),COLOR_WHITE,10,MESSAGE_INSEJC_3,PANEL_INSEJECT};
//削除確認
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 = {S_Del,10,10,COLOR_YELLO,16,MESSAGE_DELCONF_TITLE,PANEL_DELCONF};
const tMessage mess_delconf_Msg = {S_Del2,10,50,COLOR_YELLO,12,MESSAGE_DELCONF_MSG,PANEL_DELCONF};
const tMessage mess_delconf_Msg2 = {S_Del3,10,70,COLOR_YELLO,12,MESSAGE_DELCONF_MSG2,PANEL_DELCONF};
const tMessage mess_delconf_Msg3 = {S_Execute,10,90,COLOR_YELLO,12,MESSAGE_DELCONF_MSG3,PANEL_DELCONF};
const tMessage mess_delconf_Title = {NULL_STR,10,10,COLOR_YELLO,16,MESSAGE_DELCONF_TITLE,PANEL_DELCONF};
const tMessage mess_delconf_Msg = {NULL_STR,10,50,COLOR_YELLO,12,MESSAGE_DELCONF_MSG,PANEL_DELCONF};
const tMessage mess_delconf_Msg2 = {NULL_STR,10,70,COLOR_YELLO,12,MESSAGE_DELCONF_MSG2,PANEL_DELCONF};
const tMessage mess_delconf_Msg3 = {NULL_STR,10,90,COLOR_YELLO,12,MESSAGE_DELCONF_MSG3,PANEL_DELCONF};
nn::os::LightEvent stopEvnt(true);
tChar scr_ver[16];
tChar scr_err[32];
tChar scr_debug[32];
//menu
bool ScrInitialize(uptr heap,u32 size,bool jp,bool deb)
bool ScrInitialize(uptr heap,u32 size,u8 flag)
{
int i;
scr_evnt = EVNT_NONE;
holdVal = 0;
holdTck = nn::fnd::TimeSpan(0);
if (gui.Initialize(heap,size,&stopEvnt)==false)return false;
//日本語 or 英語
if (flag & SCR_FLG_JP)for (i =0;i<I_EndNum;i++)pS_Str[i] = S_StringsJp[i];
else
for (i =0;i<I_EndNum;i++)pS_Str[i] = S_Strings[i];
gui.ButtonCallback((uptr)pushButton);
//コンポーネント登録
gui.PanelSet(&panel_Read);
gui.PanelSet(&panel_Write);
// gui.PanelSet(&panel_End);
gui.PanelSet(&panel_Yes);
gui.PanelSet(&panel_No);
gui.PanelSet(&panel_Quit);
// gui.PanelSet(&panel_Error);
// gui.PanelSet(&panel_Success);
// gui.PanelSet(&panel_Confirm);
gui.PanelSet(&panel_delconf);
// gui.PanelSet(&panel_topmenu_help);
gui.PanelSet(&panel_title);
gui.PanelSet(&panel_menu);
gui.PanelSet(&panel_bkup);
// gui.PanelSet(&panel_dbglog);
gui.PanelSet(&panel_insexit);
gui.PanelSet(&panel_inseject);
gui.PanelLineStyle(PANEL_TITLE,COLOR_BLACK);
// gui.MessSet(&mess_Title_Err);
// gui.MessSet(&mess_Info_Err);
// gui.MessSet(&mess_Info2_Err);
// gui.MessSet(&mess_Info3_Err);
// gui.MessSet(&mess_Title_Suc);
// gui.MessSet(&mess_Info_Suc);
// gui.MessSet(&mess_Info2_Suc);
// gui.MessSet(&mess_conf_Title);
// gui.MessSet(&mess_conf_Msg);
gui.MessSet(&mess_delconf_Title);
gui.MessSet(&mess_delconf_Msg);
gui.MessSet(&mess_delconf_Msg2);
gui.MessSet(&mess_delconf_Msg3);
// gui.MessSet(&mess_topmenu_help_read);
// gui.MessSet(&mess_topmenu_help_write);
// gui.MessSet(&mess_topmenu_help_end);
// gui.MessSet(&mess_topmenu_help_operate);
gui.MessSet(&mess_title);
gui.MessSet(&mess_version);
gui.MessSet(&mess_product);
gui.MessSet(&mess_product2);
gui.MessSet(&mess_menu_read);
gui.MessSet(&mess_menu_write);
// gui.MessSet(&mess_menu_end);
gui.MessSet(&mess_menu_operate);
gui.MessSet(&mess_quit_operate);
gui.MessSet(&mess_conf);
gui.MessSet(&mess_operate);
gui.MessSet(&mess_bkuperr);
gui.MessSet(&mess_carderr);
// gui.MessSet(&mess_debug);
gui.MessSet(&mess_result);
gui.MessSet(&mess_status);
gui.MessSet(&mess_count);
gui.MessSet(&mess_count2);
gui.MessSet(&mess_insexit);
gui.MessSet(&mess_insexit2);
gui.MessSet(&mess_insexit3);
gui.MessSet(&mess_inseject);
gui.MessSet(&mess_inseject2);
gui.MessSet(&mess_inseject3);
// gui.MemoSet(&memo_dbglog);
// gui.MemoEffective(MESSAGE_PRODUCT);
gui.MessEffective(MESSAGE_ERROR_TITLE);
gui.MessEffective(MESSAGE_ERROR_INFO);
gui.MessEffective(MESSAGE_ERROR_INFO2);
@ -429,38 +397,64 @@ bool ScrInitialize(uptr heap,u32 size,bool jp,bool deb)
gui.MessEffective(MESSAGE_DELCONF_MSG);
gui.MessEffective(MESSAGE_DELCONF_MSG2);
gui.MessEffective(MESSAGE_DELCONF_MSG3);
gui.MessEffective(MESSAGE_TOPMENU_HELP_READ);
gui.MessEffective(MESSAGE_TOPMENU_HELP_WRITE);
gui.MessEffective(MESSAGE_TOPMENU_HELP_END);
gui.MessEffective(MESSAGE_TOPMENU_HELP_OPERATE);
gui.MessEffective(MESSAGE_MENU_READ);
gui.MessEffective(MESSAGE_MENU_WRITE);
// gui.MessEffective(MESSAGE_MENU_END);
gui.MessEffective(MESSAGE_MENU_OPERATE);
gui.MessEffective(MESSAGE_INSEXT_1);
gui.MessEffective(MESSAGE_INSEXT_2);
gui.MessEffective(MESSAGE_INSEXT_3);
gui.MessEffective(MESSAGE_INSEJC_1);
gui.MessEffective(MESSAGE_INSEJC_2);
gui.MessEffective(MESSAGE_INSEJC_3);
gui.MessEffective(MESSAGE_TITLE);
gui.MessEffective(MESSAGE_VERSION);
// gui.MemoEffective(MEMO_DBGLOG);
gui.PanelLineStyle(PANEL_DELCONF,COLOR_YELLO);
#ifdef USE_WCHAR
if (VERSION != 0.0){
swprintf(scr_ver,10,L"ver %.2f",VERSION);
if (deb)wcscat(scr_ver,L" DEBUG");
if (flag & SCR_FLG_DBG)wcscat(scr_ver,L" DEBUG");
}else wcscpy(scr_ver,VERSION_TXT_W);
#else
if (VERSION != 0.0){
sprintf(scr_ver,"ver %.2f",VERSION);
if (deb)strcat(scr_ver," DEBUG");
}else strcpy(scr_ver,VERSION_TXT);
#endif
gui.MessStr(MESSAGE_VERSION,scr_ver);
gui.MessStr(MESSAGE_MENU_CAUTION,scr_err);
gui.MessStr(MESSAGE_MENU_ERROR,scr_err);
// gui.MessStr(MESSAGE_MENU_DEBUG,scr_debug);
gui.MessStr(MESSAGE_MENU_READ,pS_Str[I_HelpBackup]);
gui.MessStr(MESSAGE_MENU_WRITE,pS_Str[I_HelpRestore]);
gui.MessStr(MESSAGE_MENU_OPERATE,pS_Str[I_Touch]);
gui.MessStr(MESSAGE_QUIT_OPERATE,pS_Str[I_QuitB]);
gui.MessStr(MESSAGE_CONF,pS_Str[I_Execute]);
gui.MessStr(MESSAGE_OPERATE,pS_Str[I_Touch]);
gui.MessStr(MESSAGE_INSEJC_1,pS_Str[I_Inseject]);
gui.MessStr(MESSAGE_INSEJC_2,pS_Str[I_RetTop]);
gui.MessStr(MESSAGE_INSEJC_3,pS_Str[I_QuitB]);
gui.MessStr(MESSAGE_DELCONF_TITLE,pS_Str[I_Del]);
gui.MessStr(MESSAGE_DELCONF_MSG,pS_Str[I_Del2]);
gui.MessStr(MESSAGE_DELCONF_MSG2,pS_Str[I_Del3]);
gui.MessStr(MESSAGE_DELCONF_MSG3,pS_Str[I_Execute]);
gui.PanelCaption(PANEL_READ,pS_Str[I_Backup]);
gui.PanelCaption(PANEL_WRITE,pS_Str[I_Restore]);
gui.PanelCaption(PANEL_YES,pS_Str[I_Yes]);
gui.PanelCaption(PANEL_NO,pS_Str[I_No]);
gui.PanelCaption(PANEL_QUIT,pS_Str[I_Quit]);
if (flag & SCR_FLG_CP){//コピーモードなら画面に変化
//ボタン枠色変更
gui.PanelLineStyle(PANEL_READ,COLOR_YELLO);
gui.PanelLineStyle(PANEL_WRITE,COLOR_YELLO);
gui.PanelLineStyle(PANEL_YES,COLOR_YELLO);
gui.PanelLineStyle(PANEL_NO,COLOR_YELLO);
gui.PanelLineStyle(PANEL_QUIT,COLOR_YELLO);
//タイトル
//wS_Title = pS_Str[I_TitleCp];
wcscpy(wS_Title,pS_Str[I_TitleCp]);
gui.MessCol(MESSAGE_TITLE,COLOR_YELLO);
}else wcscpy(wS_Title,pS_Str[I_Title]);
//}else wS_Title = pS_Str[I_Title];
//if (flag & SCR_FLG_NOSD)wcscat(wS_Title,L" (no SD)");
//else
if (flag & SCR_FLG_FSD)wcscat(wS_Title,L" (use SD)");
return true;
@ -492,38 +486,6 @@ void Quit()
gui.Draw();
}
/*
//トップメニュー画面
//引数:カード状態
void scr_TopMenuDbg(bool formatted,bool insertted)//デバッグ用
{
scr_evnt = EVNT_NONE;
gui.ButtonMask(nn::hid::BUTTON_A | nn::hid::BUTTON_R | nn::hid::BUTTON_L);
if (formatted)
{//リード可能
gui.MessSet(&mess_topmenu_help_read);
gui.PanelEffective(PANEL_READ);
}else{//リード不可
gui.MessSet(&mess_topmenu_help_notread);
gui.PanelEffective(PANEL_READ,false);
}
if (insertted)
{//書き込み可
gui.MessSet(&mess_topmenu_help_write);
gui.PanelEffective(PANEL_WRITE);
}else{//書き込み不可
gui.MessSet(&mess_topmenu_help_notwrite);
gui.PanelEffective(PANEL_WRITE,false);
}
gui.MessEffective(MESSAGE_TOPMENU_HELP_READ);
gui.MessEffective(MESSAGE_TOPMENU_HELP_WRITE);
// gui.PanelEffective(PANEL_END);
gui.PanelEffective(PANEL_TOPMENU);
gui.Draw();
}
*/
//通常時
@ -532,7 +494,6 @@ void scr_TopMenuDbg(bool formatted,bool insertted)//
tChar scr_pcode[32];
tChar scr_pcode2[32];
#ifdef USE_WCHAR
void scr_PrdCode(char *s)
{
wcscpy(scr_pcode,L"CARD : ");
@ -548,23 +509,6 @@ void scr_PrdCodeEx(char *s)
else mbstowcs(&scr_pcode2[7],s,30);
gui.MessStr(MESSAGE_PRODUCT2,scr_pcode2);
}
#else
void scr_PrdCode(char *s)
{
strcpy(scr_pcode,"CARD : ");
if (s[0]==0) strcat(scr_pcode,"----");
else strcat(scr_pcode,s);
gui.MessStr(MESSAGE_PRODUCT,scr_pcode);
}
void scr_PrdCodeEx(char *s)
{
strcpy(scr_pcode2,"BKUP : ");
if (s[0]==0) strcat(scr_pcode2,"----");
else strcat(scr_pcode2,s);
gui.MessStr(MESSAGE_PRODUCT2,scr_pcode2);
}
#endif
@ -577,7 +521,6 @@ void scr_DelConf()
}
//エラー表示
#ifdef USE_WCHAR
inline void set_err(int i)
{
swprintf(scr_err,16,L"ERROR %d",i);
@ -588,78 +531,57 @@ inline void set_err(wchar_t* s)
wcscpy(scr_err,s);
}
#else
inline void set_err(int i)
{
sprintf(scr_err,"ERROR %d",i);
}
inline void set_err(char* s)
{
strcpy(scr_err,s);
}
#endif
//Top menu
//引数:デバイス状態
//arg : プロダクトコード一致
void scr_TopMenu(bool formatted,bool inserted,bool exfm,bool bkupins,int err)
void scr_TopMenu(int mode,int err)
{
int i;
scr_evnt = EVNT_NONE;
u32 mask = 0;
mask |= (nn::hid::BUTTON_LEFT | nn::hid::BUTTON_X);//LEFT+X = Delete 有効
gui.MessStr(MESSAGE_TITLE,S_Title);
gui.MessStr(MESSAGE_TITLE,wS_Title);
gui.MessEffective(MESSAGE_MENU_ERROR,false,false);
gui.MessEffective(MESSAGE_MENU_CAUTION,false,false);
gui.MessEffective(MESSAGE_MENU_OPERATE,false,false);
//片方のみ有効
if (formatted && bkupins && (exfm == false))
{//バックアップ
gui.MessEffective(MESSAGE_MENU_OPERATE);
gui.PanelEffective(PANEL_READ);
gui.PanelEffective(PANEL_WRITE,false,false);
}else if (exfm && inserted)
{//リストア
mask |= (nn::hid::BUTTON_LEFT | nn::hid::BUTTON_X);//LEFT+X = Delete 有効
gui.PanelEffective(PANEL_READ,false,false);
i =0;
if (err & SDATA_ERRPUT_PCODE) i = TGT_CARD + ERC_PRODCODE;//プロダクトコード不一致
//else
//if (err & SDATA_ERRPUT_MEDIA) i = ERC_MEDIA + TGT_CARD;//バックアップなし
if (i !=0 )
{
gui.PanelEffective(PANEL_WRITE,false,false);
set_err(i);
gui.MessEffective(MESSAGE_MENU_ERROR);
}
else{
gui.MessEffective(MESSAGE_MENU_OPERATE);
gui.PanelEffective(PANEL_WRITE);
}
}else{//なし
gui.PanelEffective(PANEL_WRITE,false,false);
gui.PanelEffective(PANEL_READ,false,false);
if (inserted == false)
{
set_err(S_InsertCard);
gui.PanelEffective(PANEL_WRITE,false,false);
gui.PanelEffective(PANEL_READ,false,false);
if (err){
switch (err){//警告、エラー表示
case SCR_ERRPUT_CARD://カードが無いワーニング
set_err(pS_Str[I_InsertCard]);
gui.MessEffective(MESSAGE_MENU_CAUTION);
}else{
if (err & SDATA_ERRPUT_MEDIA) i = ERC_MEDIA + TGT_CARD;//セーブデータがマウントできない
else if (bkupins == false) i = ERC_DEVICE + TGT_SD;//書出し先デバイスが無い(SDのみ発生)
else i = ERC_EXEC;//実行エラー、フラグ設定ミス?
set_err(i);
break;
case SCR_ERRPUT_CARD2://カード確認中
set_err(pS_Str[I_CardChk]);
gui.MessEffective(MESSAGE_MENU_CAUTION);
break;
case SCR_ERRPUT_PCODE://プロダクトコード不一致
set_err(TGT_CARD + ERC_PRODCODE);
gui.MessEffective(MESSAGE_MENU_ERROR);
}
break;
case SCR_ERRPUT_MEDIA://セーブデータがマウントできない
set_err(TGT_CARD + ERC_MEDIA);
gui.MessEffective(MESSAGE_MENU_ERROR);
break;
default://実行エラー
set_err(TGT_CTR + ERC_EXEC);
gui.MessEffective(MESSAGE_MENU_ERROR);
break;
}
}else{
if (mode == SCR_MENU_READ){
gui.MessEffective(MESSAGE_MENU_OPERATE);
gui.PanelEffective(PANEL_READ);
}else
if (mode == SCR_MENU_WRITE){
gui.MessEffective(MESSAGE_MENU_OPERATE);
gui.PanelEffective(PANEL_WRITE);
}
}
gui.ButtonMask(mask);
//LEFT+X = Delete 有効
gui.ButtonMask(nn::hid::BUTTON_LEFT | nn::hid::BUTTON_X);
gui.MessEffective(MESSAGE_PRODUCT);
gui.MessEffective(MESSAGE_PRODUCT2);
@ -670,6 +592,8 @@ void scr_TopMenu(bool formatted,bool inserted,bool exfm,bool bkupins,int err)
gui.Draw();
}
//デバッグ用、ボタン待ち
void ScrStep()
{
@ -695,7 +619,7 @@ void scr_Backup()
{
scr_evnt = EVNT_NONE;
gui.PanelLineStyle(PANEL_BKUP,COLOR_SKY);
gui.MessStr(MESSAGE_TITLE,S_TitleBkup);
gui.MessStr(MESSAGE_TITLE,pS_Str[I_TitleBkup]);
gui.PanelEffective(PANEL_TITLE);
ClearBkupMess();
gui.Draw();
@ -714,7 +638,7 @@ void scr_Restore()
{
scr_evnt = EVNT_NONE;
gui.PanelLineStyle(PANEL_BKUP,COLOR_PARPL);
gui.MessStr(MESSAGE_TITLE,S_TitleRestore);
gui.MessStr(MESSAGE_TITLE,pS_Str[I_TitleRestore]);
gui.PanelEffective(PANEL_TITLE);
ClearBkupMess();//backupと同じパネルを使う
gui.Draw();
@ -734,7 +658,7 @@ void scr_Status(tChar *s,eColor col)
gui.MessCol(MESSAGE_STATUS,col);
gui.MessStr(MESSAGE_STATUS,s);
gui.MessEffective(MESSAGE_STATUS);
gui.Draw();
gui.Draw_U();
}
void scr_ResultQuit(tChar *s,eColor col)
@ -747,62 +671,63 @@ void scr_ResultQuit(tChar *s,eColor col)
}
void scr_InsExitQuit()
void scr_InsEjectQuit()
{
ClearBkupMess();
gui.PanelLineStyle(PANEL_INSEXIT,COLOR_RED);
gui.PanelEffective(PANEL_INSEXIT);
gui.PanelLineStyle(PANEL_INSEJECT,COLOR_RED);
gui.PanelEffective(PANEL_INSEJECT);
Quit();
}
void scr_InsEjectSD()
{
ClearBkupMess();
gui.MessStr(MESSAGE_INSEJC_1,pS_Str[I_InsejectSD]);
gui.MessStr(MESSAGE_INSEJC_2,pS_Str[I_Restart1]);
gui.MessStr(MESSAGE_INSEJC_3,pS_Str[I_Restart2]);
gui.PanelLineStyle(PANEL_INSEJECT,COLOR_RED);
gui.PanelEffective(PANEL_INSEJECT);
gui.Draw();
}
// カウント/MAX 表示
tChar str_Counter[32];
tChar str_Counter2[32];
void scr_CountPerMax(int ct,int max)
{
#ifdef USE_WCHAR
swprintf(str_Counter,30,L"%d / %d",ct,max);
#else
sprintf(str_Counter,"%d / %d",ct,max);
#endif
gui.MessStr(MESSAGE_COUNT,str_Counter);
gui.MessEffective(MESSAGE_COUNT);
gui.Draw();
// gui.Draw();
}
//ゲージtotal
void scr_CountPerMax2(int ct,int max,int total)
//ゲージ
void scr_Gage(int ct,int max)
{
int i,lv;
if (total == -1) str_Counter2[0]=0;
else if (total != 0){
// gui.MessCol(MESSAGE_COUNT2,COLOR_WHITE);
#ifdef USE_WCHAR
swprintf(str_Counter2,30,L"total size %d",total);
}else{
// gui.MessCol(MESSAGE_COUNT2,COLOR_YELLO);
lv = ct/(max/25);
for (i =0;i<lv;i++)str_Counter2[i] = L'>';
while ( i < 25 )str_Counter2[i++] = L'|';
str_Counter2[i] = 0;
}
#else
sprintf(str_Counter2,"total size %d",total);
}else{
// gui.MessCol(MESSAGE_COUNT2,COLOR_YELLO);
lv = ct/(max/25);
for (i =0;i<lv;i++)str_Counter2[i] = '>';
while ( i < 25 )str_Counter2[i++] = '|';
str_Counter2[i] = 0;
}
#endif
lv = ct/(max/25);
for (i =0;i<lv;i++)str_Counter2[i] = L'>';
while ( i < 25 )str_Counter2[i++] = L'|';
str_Counter2[i] = 0;
//sprintf(str_Counter2,"%d / %d",ct,max);
gui.MessStr(MESSAGE_COUNT2,str_Counter2);
gui.MessEffective(MESSAGE_COUNT2);
gui.Draw();
//gui.Draw();
}
//total
void scr_Total(int total)
{
swprintf(str_Counter2,30,L"total size %d",total);
gui.MessStr(MESSAGE_COUNT2,str_Counter2);
gui.MessEffective(MESSAGE_COUNT2);
//gui.Draw();
}
void scr_MessOnCount2(tChar *str)
{
// gui.MessCol(MESSAGE_COUNT2,COLOR_YELLO);
@ -860,6 +785,12 @@ void scr_Draw()
gui.Draw();
}
void scr_Vsnc()
{
gui.WaitVsnc();
}
void scr_GetEvnt()
{
// gui.thUpdate();

View File

@ -34,21 +34,42 @@ typedef struct{
}tColStr;
//Topメニューでのエラー表示用のフラグ
//bit位置の
#define SDATA_ERRPUT_PCODE (1 << 0)
#define SDATA_ERRPUT_MEDIA (1 << 1)
#define SDATA_ERRPUT_VERIFI (1 << 2)
//Topメニューでのエラー&状態表示フラグ
enum{
SCR_ERRPUT_NONE,
SCR_ERRPUT_PCODE,
SCR_ERRPUT_MEDIA,
SCR_ERRPUT_EXEC,
SCR_ERRPUT_CARD,
SCR_ERRPUT_CARD2
};
//ƒfƒoƒOƒ<C692>[ƒhÌ•\ަ
//#define SDATA_ERRPUT_DEBUG (1>>3)
bool ScrInitialize(uptr heap,u32 size,bool jp,bool deb);
//Initialize用フラグ
//日本語、コピーモード、強制SD、SDなし、デバグ
#define SCR_FLG_JP 1
#define SCR_FLG_CP 2
#define SCR_FLG_FSD 4
#define SCR_FLG_NOSD 8
#define SCR_FLG_DBG 0x80
//メニュー表示
enum{
SCR_MENU_NONE,
SCR_MENU_READ,
SCR_MENU_WRITE
};
bool ScrInitialize(uptr heap,u32 size,u8 flag);
void ScrFinalize();
void ScrClr();
int ScrDbgLogGetMax();
void ScrStep();
void scr_TopMenuDbg(bool formatted,bool insertted);
void scr_TopMenu(bool formatted,bool inserted,bool exfm,bool sdins,int err);
void scr_TopMenu(int mode,int err);
void scr_ErrorQuitDbg(tColStr **s);
void scr_SuccessQuitDbg(tColStr **s);
void scr_ConfirmDbg(char *str);
@ -56,17 +77,20 @@ void scr_BackupYesNo();
void scr_Backup();
void scr_RestoreYesNo();
void scr_Restore();
void scr_InsExitQuit();
void scr_InsEjectQuit();
void scr_InsEjectSD();
void scr_Status(tChar *s,eColor col);
void scr_ResultQuit(tChar *s,eColor col);
void scr_CountPerMax(int ct,int max);
void scr_CountPerMax2(int ct,int max,int total);
void scr_Gage(int ct,int max);
void scr_Total(int total);
void scr_PrdCode(char *s);
void scr_PrdCodeEx(char *s);
void scr_DelConf();
void scr_MessOnCount2(tChar *str);
void scr_Draw();
void scr_GetEvnt();
void scr_Vsnc();
#endif

View File

@ -0,0 +1,462 @@
//#include <nn/fs/ctr/mpcore/fs_FileSystemBasePrivate.h>
#include "sub.h"
#include "./screen/screen.h"
//何故かクラス関数でイベント登録出来ないので外部参照
extern bool CheckInsEject();//挿抜チェック
//------------------------------------------------------- メンバ関数
//**** ラッピング ***
//コンストラクタ
CsmSaveFile::CsmSaveFile()
{
finalized = false;
pos_card = 0;
}
//終了
void CsmSaveFile::Finalize()
{
if (finalized)return;
savedata.Finalize();
exsave.Finalize();
memsave.Finalize();
finalized = true;
}
//デストラクタ
CsmSaveFile:: ~CsmSaveFile()
{
Finalize();
}
//存在チェック
bool CsmSaveFile::IsExist(TgtDev dev)
{
if(dev == TGT_CARD)return savedata.IsExist();
if(dev == TGT_SD)return exsave.IsExist();
if(dev == TGT_MEM)return memsave.IsExist();
return false;
}
//削除
bool CsmSaveFile::Delete(TgtDev dev)
{
//if(dev == TGT_CARD)return false;
if(dev == TGT_SD)return exsave.Delete();
if(dev == TGT_MEM)return memsave.Delete();
return false;
}
//Result
nn::Result CsmSaveFile::LastNnResult(TgtDev dev)
{
nn::Result res;
if(dev == TGT_CARD)res = savedata.LastNnResult;
else if(dev == TGT_SD)res = exsave.LastNnResult;
else if(dev == TGT_MEM)res = memsave.LastNnResult;
return res;
}
//Mount
myResult CsmSaveFile::Mount(TgtDev dev)
{
myResult res;
if(dev == TGT_CARD)res = savedata.Mount();
else if(dev == TGT_SD)res = exsave.Mount();
else if(dev == TGT_MEM)res = memsave.Mount();
return res;
}
//Unmoun
void CsmSaveFile::Unmount(TgtDev dev)
{
if(dev == TGT_CARD)savedata.Unmount();
else if(dev == TGT_SD)exsave.Unmount();
else if(dev == TGT_MEM)memsave.Unmount();
}
void CsmSaveFile::Unmount()
{
savedata.Unmount();
exsave.Unmount();
memsave.Unmount();
}
//ワークの作成
myResult CsmSaveFile::Create(TgtDev dev,u32 entryDir,u32 entryFile)
{
if(dev == TGT_SD)return exsave.Create(entryDir,entryFile);
else if(dev == TGT_MEM)return memsave.Create(entryDir,entryFile);
return RESULT_FAIL;
}
//パス取得位置リセット
void CsmSaveFile::ResetPath(TgtDev dev)
{
if(dev == TGT_CARD)savedata.ResetPath();
else if(dev == TGT_SD)exsave.ResetPath();
else if(dev == TGT_MEM)memsave.ResetPath();
}
//パス取得
myResult CsmSaveFile::GetPath(TgtDev dev,wchar_t *path)
{
if(dev == TGT_CARD)return savedata.GetPath(path);
if(dev == TGT_SD)return exsave.GetPath(path);
if(dev == TGT_MEM)return memsave.GetPath(path);
return RESULT_FAIL;
}
//フラッシュ
bool CsmSaveFile::Flush(TgtDev dev)
{
if(dev == TGT_CARD)return savedata.Flush();
if(dev == TGT_SD)return exsave.Flush();
if(dev == TGT_MEM)return true;
return false;
}
//オープンファイル
bool CsmSaveFile::Open(TgtDev dev,wchar_t *path)
{
if(dev == TGT_CARD){
pos_card = 0;
return savedata.Open(path);
}else if(dev == TGT_SD)return exsave.Open(path);
else if(dev == TGT_MEM)return memsave.Open(path);
return false;
}
bool CsmSaveFile::OpenW(TgtDev dev,wchar_t *path,s64 size)
{
if(dev == TGT_CARD)return savedata.OpenW(path,true);//作成あり
else if(dev == TGT_SD)return exsave.OpenW(path,false);//拡張セーブは先にCreateしとく
else if(dev == TGT_MEM)if(size>0)return memsave.OpenW(path,size);
return false;
}
bool CsmSaveFile::CreateFile(TgtDev dev,wchar_t *path,s64 size)
{
if(dev == TGT_CARD)return savedata.CreateFile(path,size);
else if(dev == TGT_SD)return exsave.CreateFile(path,size);
return false;
}
//クローズ
void CsmSaveFile::Close(TgtDev dev)
{
if(dev == TGT_CARD)savedata.Close();
else if(dev == TGT_SD)exsave.Close();
else if(dev == TGT_MEM)memsave.Close();
}
void CsmSaveFile::Close()
{
savedata.Close();
exsave.Close();
memsave.Close();
}
void CsmSaveFile::CloseW(TgtDev dev)
{
if(dev == TGT_CARD)savedata.CloseW();
else if(dev == TGT_SD)exsave.CloseW();
else if(dev == TGT_MEM)memsave.CloseW();
}
//ファイルサイズ取得
s64 CsmSaveFile::FileSize(TgtDev dev)
{
if(dev == TGT_CARD)return savedata.FileSize;
else if(dev == TGT_SD)return exsave.FileSize;
else if(dev == TGT_MEM)return memsave.FileSize;
return 0;
}
//ライト
s32 CsmSaveFile::Write(TgtDev dev,char *buffer,size_t size)
{
if(dev == TGT_CARD)return savedata.Write(buffer,size);
else if(dev == TGT_SD)return exsave.Write(buffer,size);
else if(dev == TGT_MEM)return memsave.Write(buffer,size);
return 0;
}
//リード
s32 CsmSaveFile::Read(TgtDev dev,char *buffer,size_t size)
{
if(dev == TGT_CARD)return savedata.Read(buffer,size);
else if(dev == TGT_SD)return exsave.Read(buffer,size);
else if(dev == TGT_MEM)return memsave.Read(buffer,size);
return 0;
}
//**** カード専用 ***
//プロダクトコード取得
bool CsmSaveFile::GetPrdCode()
{
PrdCode[0] = 0;//Clear
if (savedata.GetPrdCode()){
strcpy(PrdCode,savedata.PrdCode);
return true;
}
return false;
}
//セーブデータの情報
//arcInfo <- フォーマット情報、ファイル、ディレクトリ数
//scList <- ディレクトリパス
bool CsmSaveFile::GetInfo(tArcInfo *pinfo,tDcList *pDcList,size_t clsz)
{
return savedata.GetInfo(pinfo,pDcList,clsz);
}
//ユーザセーブのブロックリード
//中身のデータが作成サイズに満たない場合に
//未書込み領域で検証エラー(desc=329)となる場合がある
//読めないブロックは0で置き換える(SDKツールのSaveFilerと同じ方法..ロンチ当時)
//size = サイズ
// 検証は512単位、読めてるとこまで置き換えないよう512以下で指定
// 尚、ユーザセーブ以外の検証は4096ごと
//pos = 位置指定
// SDK3.1(より?)エラー時にファイルポインタ更新しないので2.0より
bool CsmSaveFile::ReadBlock(char* buffer,size_t size)
{
if ((size > 512) || (size < 0))return false;
savedata.SetPos(pos_card);
if(savedata.Read(buffer,size) != size )
{
NN_LOG("%d\n",LastNnResult(TGT_CARD).GetDescription());
if(nn::fs::ResultVerificationFailed::Includes(LastNnResult(TGT_CARD)))
{//検証エラー
for (int i = 0; i < size; i++) buffer[i] = 0;//0埋め
}else return false;
}
pos_card += size;
return true;
}
//*** 状態取得 ***
bool CsmSaveFile::stsActive(TgtDev dev)
{
if (dev == TGT_CARD)return GetPrdCode();
if (dev == TGT_MEM)return true;
if (dev == TGT_SD)return nn::fs::IsSdmcWritable();
return false;
}
bool CsmSaveFile::stsFormatted(TgtDev dev)
{
return IsExist(dev);
}
extern void Icon(eColor col);
//*** ファイルコピー ***
myResult CsmSaveFile::Copy(TgtDev dest,TgtDev src,wchar_t *path,wchar_t *pathw)
{
myResult res;
int rsize;
s64 fsize,msize;
if (Open(src,path)==false)return RESULT_FAIL_OPEN;
fsize = FileSize(src);
if (pathw == 0)pathw = path;
if (OpenW(dest,pathw,fsize)==false)return RESULT_FAIL_OPENW;
//カードは検証単位の512ずつ読むべし
msize=fsize;
res = RESULT_OK;
while(fsize)
{
if(CheckInsEject()){
res = RESULT_INSEJECT;
break;
}
if(dest == TGT_CARD)Icon(COLOR_PARPL);//動作中アイコン"-","|"
else Icon(COLOR_SKY);
if(msize > FILEBUFF_SIZE * 2){
scr_Gage(msize-fsize,msize);
}
if (fsize>FILEBUFF_SIZE)
{
rsize = FILEBUFF_SIZE;
fsize -= FILEBUFF_SIZE;
}else{
rsize = fsize;
fsize = 0;
}
if (src == TGT_CARD){//カードは空き領域補正つきリード
if(ReadBlock(fileBuffer,rsize)==false){
res = RESULT_FAIL_READ;
break;
}
}else{
if(Read(src,fileBuffer,rsize)!=rsize){
res = RESULT_FAIL_READ;
break;
}
}
if(Write(dest,fileBuffer,rsize) != rsize ){
res= RESULT_FAIL_WRITE;
break;
}
}
Close(src);
CloseW(dest);
if (res != RESULT_OK)return res;
else if (fsize != 0)res = RESULT_FAIL;//想定外のループ抜け
return res;
}
//*** オープン済ファイル間のコピー ***
myResult CsmSaveFile::OpnCpy(TgtDev dest,TgtDev src,size_t size)
{
myResult res;
int rsize;
s64 msize;
//カードは検証単位の512ずつ読むべし
msize=size;
res = RESULT_OK;
while(size)
{
if(CheckInsEject()){
res = RESULT_INSEJECT;
break;
}
if(msize > FILEBUFF_SIZE * 2){
scr_Gage(msize-size,msize);//ゲージ
}
if(dest == TGT_CARD)Icon(COLOR_PARPL);//動作中アイコン"-","|"
else Icon(COLOR_SKY);
if (size>FILEBUFF_SIZE)
{
rsize = FILEBUFF_SIZE;
size -= FILEBUFF_SIZE;
}else{
rsize = size;
size = 0;
}
if (src == TGT_CARD){//カードは空き領域補正つきリード
if(ReadBlock(fileBuffer,rsize)==false){
res = RESULT_FAIL_READ;
break;
}
}else{
if(Read(src,fileBuffer,rsize)!=rsize){
res = RESULT_FAIL_READ;
break;
}
}
if(Write(dest,fileBuffer,rsize) != rsize ){
res= RESULT_FAIL_WRITE;
break;
}
}
if ((res == RESULT_OK) && (size != 0))res = RESULT_FAIL;//想定外のループ抜け
return res;
}
//*** オープン済ファイル間のコンペア ***
myResult CsmSaveFile::OpnCmp(TgtDev dest,TgtDev src,size_t size)
{
myResult res;
int rsize;
s64 msize;
//カードは検証単位の512ずつ読むべし
msize=size;
res = RESULT_OK;
while(size)
{
if(CheckInsEject()){
res = RESULT_INSEJECT;
break;
}
if(msize > FILEBUFF_SIZE * 2){
scr_Gage(msize-size,msize);//ゲージ
}
Icon(COLOR_YELLO);//動作中アイコン"-","|"
if (size>FILEBUFF_SIZE)
{
rsize = FILEBUFF_SIZE;
size -= FILEBUFF_SIZE;
}else{
rsize = size;
size = 0;
}
if (src == TGT_CARD){//カードは空き領域補正つきリード
if(ReadBlock(fileBuffer,rsize)==false){
res = RESULT_FAIL_READ;
break;
}
}else{
if(Read(src,fileBuffer,rsize)!=rsize){
res = RESULT_FAIL_READ;
break;
}
}
//destにカード指定のときはライト後とみなし通常リード
if(Read(dest,fileBuffer2,rsize)!=rsize){
res = RESULT_FAIL_READ;
break;
}
//比較
if(memcmp(fileBuffer,fileBuffer2,rsize)!=0){
res = RESULT_FAIL_VERIFI;
break;
}
}
if ((res == RESULT_OK) && (size != 0))res = RESULT_FAIL;//想定外のループ抜け
return res;
}
//ディレクトリ作成
bool CsmSaveFile::MakeDir(TgtDev dev,wchar_t *path,bool *mkdir)
{
if(dev == TGT_CARD)return savedata.MakeDir(path,mkdir);
if(dev == TGT_SD)return exsave.MakeDir(path,mkdir);
//if(dev == TGT_MEM)return memsave.MakeDir(path,mkdir);
return false;
}
//ファイル削除
bool CsmSaveFile::DeleteFile(TgtDev dev,wchar_t *path)
{
if(dev == TGT_CARD)return savedata.DeleteFile(path);
if(dev == TGT_SD)return exsave.DeleteFile(path);
//if(dev == TGT_MEM)return memsave.MakeDir(path,mkdir);
return false;
}
/*---------------------------------------------------------------------------*
End of file
*---------------------------------------------------------------------------*/

View File

@ -0,0 +1,75 @@
#ifndef _SUB_H_
#define _SUB_H_
#include <nn.h>
#include "../../../common/savefile/membak.h"
#include "../../../common/savefile/exsave.h"
#include "../../../common/savefile/savefile.h"
#include "../../../common/savefile/savedata.h"
#include "../../../common/my_defs.h"
//セーブデータの検証データが512単位なので
#define FILEBUFF_SIZE 512
//クラス宣言
class CsmSaveFile
{
public:
char PrdCode[20];
private:
bool finalized;
s64 pos_card;//カードのリード位置
//ドライバの仕様で速度的に4バイトアラインした方がいい(SDK 0.14.23 時点)
char fileBuffer[FILEBUFF_SIZE] NN_ATTRIBUTE_ALIGN(4);
char fileBuffer2[FILEBUFF_SIZE] NN_ATTRIBUTE_ALIGN(4);
private:
SaveData savedata;
ExSave exsave;
MemBak memsave;
public:
CsmSaveFile();
~CsmSaveFile();
//void Initialize();
bool IsExist(TgtDev dev);
bool Delete(TgtDev dev);
void Finalize();
nn::Result LastNnResult(TgtDev dev);
myResult Mount(TgtDev dev);
void Unmount(TgtDev dev);
void Unmount();
myResult Create(TgtDev dev,u32 entryDir,u32 entryFile);
void ResetPath(TgtDev dev);
myResult GetPath(TgtDev dev,wchar_t *path);
bool Open(TgtDev dev,wchar_t *path);
bool OpenW(TgtDev dev,wchar_t *path,s64 size=0);
bool CreateFile(TgtDev dev,wchar_t *path,s64 size);
void Close(TgtDev dev);
void Close();
void CloseW(TgtDev dev);
s64 FileSize(TgtDev dev);
s32 Write(TgtDev dev,char *buffer,size_t size);
s32 Read(TgtDev dev,char *buffer,size_t size);
myResult Copy(TgtDev dest,TgtDev src,wchar_t *path,wchar_t *pathw = 0);
myResult OpnCpy(TgtDev dest,TgtDev src,size_t size);
myResult OpnCmp(TgtDev dest,TgtDev src,size_t size);
bool stsActive(TgtDev dev);
bool stsFormatted(TgtDev dev);
bool MakeDir(TgtDev dev,wchar_t *path,bool *mkdir);
bool DeleteFile(TgtDev dev,wchar_t *path);
bool Flush(TgtDev dev);
//Card
bool GetPrdCode();
bool GetInfo(tArcInfo *pinfo,tDcList *pDcList,size_t clsz = 0);
bool ReadBlock(char* buffer,size_t size);
myResult Format(tArcInfo *pinfo){return savedata.Format(pinfo);};
bool Commit(){return savedata.Commit();};
//SD
bool SetPos(s64 pos){return exsave.SetPosW(pos);};
};
#endif

View File

@ -16,10 +16,11 @@
#ifndef VER_H_
#define VER_H_
#define VERSION 1.2
#define VERSION 2.0
// ver = 0 ならテキストの方を表示
//#define VERSION 0.0
#define VERSION_TXT "TEST ONLY"
#define VERSION_TXT_W L"TEST ONLY"
#endif

View File

@ -0,0 +1,16 @@
・impのテストデータ作成
対象デバイスに合わせて
rsfのCARD2指定する
デバガでMover本体をカードアプリ実行する場合
rsfのサイズをimp作成時と一致させる
・白箱デバグ
エミュレーションメモリから書き戻さないと
カード上のセーブエリアに反映しない
注意) rsfのサイズ変更したらROM焼きして
セーブ設定を一致させとく
カードにデータがあっても、デバグでは
エミュメモリを見に行くので、ロードするか作成しないと
認識しない

View File

@ -29,7 +29,14 @@ CUP
[Histry]
#表示ver マスタリング時のver
# 変更内容
v1.20 - body:空のディレクトリが作成されない不具合を修正
v2.00 - Remaster 2.1.3
CARD2対応、大容量のときSD使用(拡張セーブ)
v1.30 - Remaster 2.1.2
コピーモード追加、ユーザ情報でメッセージの英/日切り替え
    
v1.20 - Remaster 2.1.0
body:空のディレクトリが作成されない不具合を修正
メッセージを日本語表示
v1.10改 impNOAでインポート出来なかったので桁チェック削除

View File

@ -51,20 +51,22 @@ void GetErrorStr(TgtDev dev,nn::Result res,int cd,tChar* s)
bool prohibitHome = false;// HOME ボタン禁止
// ファイルシステム処理と遷移やスリープ処理との排他制御に利用
//nn::os::CriticalSection g_SleepCS;
// HOME ボタン遷移とファイルシステム処理の排他制御に利用(手動リセット)
nn::os::LightEvent g_TransitionEvent;
//nn::os::LightEvent g_TransitionEvent;
// スリープとファイルシステム処理の排他制御に利用(手動リセット)
nn::os::LightEvent g_AwakeEvent;
nn::os::CriticalSection g_CriticalSection;
nn::os::CriticalSection g_CriticalSectionForSleep;
void restoreGraphicSetting()
{
// GPU レジスタ設定の復帰
// ただし、下記は DMPGL API を使用して設定した状態の復帰のみ
// レジスタ設定コマンドは全て再発行するべき
// 他のライブラリを利用する場合は、それぞれの方法でレジスタ設定コマンドを全て再発行する必要があります。
// 参考GD ライブラリによる設定を復元する
// nn::gd::System::ForceDirty(nn::gd::MODULE_ALL);
nngxUpdateState(NN_GX_STATE_ALL);
nngxValidateState(NN_GX_STATE_ALL,GL_TRUE);
//nngxValidateState(NN_GX_STATE_ALL,GL_TRUE); //delete 2012.8.22, cause error SDK4.x firm
}
FUNCP end_func;
@ -73,13 +75,14 @@ void InitSysBreak(uptr adrs){
SleepHandler::Initialize();
//g_SleepCS.Initialize();
g_AwakeEvent.Initialize(true);
g_TransitionEvent.Initialize(true);
// g_TransitionEvent.Initialize(true);
g_CriticalSection.Initialize();
g_CriticalSectionForSleep.Initialize();
// 起床中は常に Signal 状態にしておく
g_AwakeEvent.Signal();
g_TransitionEvent.Signal();
// g_TransitionEvent.Signal();
// アプレットライブラリに関する機能を有効にする
nn::applet::Enable(false);
@ -89,9 +92,12 @@ void InitSysBreak(uptr adrs){
// ロゴ表示時に電源ボタンが押されたなど、既に終了条件が立っていた場合、ここでアプリを終了させる
if ( nn::applet::IsExpectedToCloseApplication() )
{
g_AwakeEvent.Finalize();
g_CriticalSection.Finalize();
g_CriticalSectionForSleep.Finalize();
SleepHandler::Finalize();
nn::Result result = nn::applet::PrepareToCloseApplication();
NN_UTIL_PANIC_IF_FAILED( result );
// nn::Result result = nn::applet::PrepareToCloseApplication();
// NN_UTIL_PANIC_IF_FAILED( result );
nn::applet::CloseApplication();
}
// グラフィックスライブラリの初期化は、以降で行わなければならない
@ -103,14 +109,16 @@ void InitSysBreak(uptr adrs){
//終了処理
void finish()
{
SleepHandler::Finalize();//SLEEP
//g_SleepCS.Finalize();
// SleepHandler::Finalize();//SLEEP
(*end_func)();
g_AwakeEvent.Finalize();
g_TransitionEvent.Finalize();
//g_TransitionEvent.Finalize();
g_CriticalSection.Finalize();
g_CriticalSectionForSleep.Finalize();
SleepHandler::Finalize();//SLEEP
//nn::fs::Finalize();
@ -119,15 +127,16 @@ void finish()
appHeap.Finalize();
nn::os::SetDeviceMemorySize(0);
nn::os::SetHeapSize(0);
// nn::os::SetHeapSize(0);
NN_LOG("End\n");
nn::applet::PrepareToCloseApplication();
//nn::applet::PrepareToCloseApplication();
nn::applet::CloseApplication();
}
void CheckSysBreak(){
// スリープからの起床時は、1フレーム分の描画完了を待ってから LCD を有効にする
if ( SleepHandler::s_IsAfterWakeUp ) {
nn::gx::StartLcdDisplay();
@ -158,7 +167,7 @@ void CheckSysBreak(){
nn::applet::ClearHomeButtonState();//HOME ボタンフラグ削除
}else
{
g_TransitionEvent.ClearSignal();
//g_TransitionEvent.ClearSignal();
// ファイルシステム処理中は遷移を待つ
//if ( g_SleepCS.TryEnter() )
@ -171,8 +180,7 @@ void CheckSysBreak(){
nn::applet::AppletWakeupState wState = nn::applet::WaitForStarting();
NN_UNUSED_VAR(wState);
//g_SleepCS.Leave();
g_TransitionEvent.Signal();
//g_TransitionEvent.Signal();
// HOME メニューからの中断やバッテリー不足の要因により
// アプリ終了と判断された場合、アプリのメインループを抜けて終了処理へ
@ -195,20 +203,19 @@ void CheckSysBreak(){
// 電源ボタン処理(グラフィックスライブラリが初期化済みでなければならない)
if ( nn::applet::IsExpectedToProcessPowerButton() )
{
g_TransitionEvent.ClearSignal();
//g_TransitionEvent.ClearSignal();
// ファイルシステム処理中は遷移を待つ
//if ( g_SleepCS.TryEnter() )
{
nn::applet::DisableSleep();
//nngxWaitCmdlistDone();
nngxWaitCmdlistDone();
nn::applet::ProcessPowerButton();
nn::applet::AppletWakeupState wState = nn::applet::WaitForStarting();
NN_UNUSED_VAR(wState);
//nn::applet::AppletWakeupState wState = nn::applet::WaitForStarting();
//NN_UNUSED_VAR(wState);
nn::applet::WaitForStarting();
//g_SleepCS.Leave();
g_TransitionEvent.Signal();
//g_TransitionEvent.Signal();
// アプリ終了と判断された場合、アプリのメインループを抜けて終了処理へ
if ( nn::applet::IsExpectedToCloseApplication() )

View File

@ -247,14 +247,13 @@ void drawDisp()
setText(s_Panel[s_Message[si].parent].pos.x+s_Message[si].pos.x,
s_Panel[s_Message[si].parent].pos.y+s_Message[si].pos.y,s_Message[si].caption);
//NN_LOG(s_Message[i].caption);
//NN_LOG(" %d\n",i);
}
}
s_RenderSystem.SwapBuffers();
nngxWaitVSync(NN_GX_DISPLAY0);
// nngxWaitVSync(NN_GX_DISPLAY0);
//下
tCol col;
@ -279,10 +278,41 @@ void drawDisp()
}
s_RenderSystem.SwapBuffers();
nngxWaitVSync(NN_GX_DISPLAY1);
// nngxWaitVSync(NN_GX_DISPLAY1);
}
//上のみ
void drawDisp_U()
{
//NN_LOG("draw\n");
//上
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0);
s_RenderSystem.Clear();
int i;
for (i=0;i<PANEL_MAX;i++){
if ((s_Panel[i].visible) && (s_Panel[i].scr == 0)){
drawBox(s_Panel[i].pos,s_Panel[i].size,&s_Panel[i].style,s_Panel[i].caption);
}
}
for (si=0;si<MESS_MAX;si++){
if ( s_Message[si].visible && s_Panel[s_Message[si].parent].visible ){
setSize(s_Message[si].style.width);
setColor(&s_Message[si].style.color);
//s_RenderSystem.DrawText(s_Panel[s_Message[i].parent].pos.x+s_Message[i].pos.x,
// s_Panel[s_Message[i].parent].pos.y+s_Message[i].pos.y,s_Message[i].caption);
setText(s_Panel[s_Message[si].parent].pos.x+s_Message[si].pos.x,
s_Panel[s_Message[si].parent].pos.y+s_Message[si].pos.y,s_Message[si].caption);
//NN_LOG(s_Message[i].caption);
//NN_LOG(" %d\n",i);
}
}
s_RenderSystem.SwapBuffers();
}
void ColorFromCode(eColor c,tCol *col)
{
@ -480,6 +510,13 @@ myResult Gui::PanelSet(const tPanel *panel)
return RESULT_OK;
}
myResult Gui::PanelCaption(u8 id,tChar *str)
{
if (id >= PANEL_MAX)return RESULT_BAD_PARAM;
s_Panel[id].caption = str;
return RESULT_OK;
}
myResult Gui::PanelEffective(u8 id,bool enable,bool visible)
{
if (id >= PANEL_MAX)return RESULT_BAD_PARAM;
@ -541,6 +578,16 @@ void Gui::Draw()
drawDisp();
}
void Gui::Draw_U()
{
drawDisp_U();
}
void Gui::WaitVsnc()
{
nngxWaitVSync(NN_GX_DISPLAY0);
nngxWaitVSync(NN_GX_DISPLAY1);
}
void Gui::DisableAll()
{

View File

@ -80,14 +80,17 @@ public:
myResult MessSet(const tMessage *mes);
// myResult MemoSet(const tMemo *m);
void Draw();
void Draw_U();
void DisableAll();
myResult PanelEffective(u8 id,bool enable=true,bool visible=true);
myResult PanelCaption(u8 id,tChar *str);
myResult MessEffective(u8 id,bool enable=true,bool visible=true);
// myResult MemoEffective(u8 id,bool enable=true,bool visible=true);
myResult MessStr(u8 id,tChar *str);
myResult MessCol(u8 id,eColor col);
// myResult MemoStr(u8 id,tChar *str,u16 ln);
myResult PanelLineStyle(u8 id,eColor col=COLOR_WHITE,u8 width = 2);
void WaitVsnc();
//void thUpdate();
};

Binary file not shown.

View File

@ -60,6 +60,7 @@ ERC_FATAL = 99 //深刻なエラー
typedef enum{//対象デバイス指定
TGT_NONE = 0,
TGT_CTR = 900,
TGT_CARD = 100,
TGT_SD = 200,
TGT_MEM = 300
@ -80,6 +81,7 @@ typedef enum {
RESULT_FAIL_FORMAT,
RESULT_FAIL_GETDIR,
RESULT_FAIL_VERIFI,
RESULT_FAIL_WORK,
RESULT_NOT_FAUND,
RESULT_NO_MEDIA,
RESULT_NOT_FORMAT,
@ -94,6 +96,7 @@ typedef enum {
RESULT_PATH_LENGTH_OVER,
RESULT_DEVICE_FULL,
RESULT_WORK_OVER,
RESULT_INSEJECT,//挿抜
RESULT_MAX
}myResult;

View File

@ -115,6 +115,19 @@ bool CmpPathW(wchar_t *s,wchar_t *s2)
//-------------- Class SaveFileWrite
//file create
bool SaveFileWrite::CreateFile(wchar_t *path,s64 size)
{
wcscpy(pathw_w,root_w);
ChainPath(pathw_w,path);
LastNnResult = nn::fs::TryCreateFile(pathw_w,size);
if(LastNnResult.IsSuccess())return true;
nn::fs::TryDeleteFile(pathw_w);//ゴミ掃除
return false;
}
//ディレクトリ作成ありのオープン
bool SaveFileWrite::OpenC(wchar_t *path,s64 size,bool *mkdir)
{
@ -130,6 +143,7 @@ bool SaveFileWrite::OpenC(wchar_t *path,s64 size,bool *mkdir)
LastNnResult = writer.TryInitialize(pathw_w,false);
return LastNnResult.IsSuccess();
}
nn::fs::TryDeleteFile(pathw_w);//ゴミ掃除
//ディレクトリがなければディレクトリを作成
pos = GetPosDelmLast(pathw_w,RootLength);//ファイルが存在するディレクトリ
if (pos <= 0)return false;//rootかパスが不正
@ -194,12 +208,12 @@ bool SaveFileWrite::OpenAdd(wchar_t *path)
}
//ディレクトリ作成なしオープン
bool SaveFileWrite::OpenW(const wchar_t *path)
//ディレクトリオープン
bool SaveFileWrite::OpenW(const wchar_t *path,bool make)
{
wcscpy(pathw_w,root_w);
ChainPath(pathw_w,(wchar_t*)path);
LastNnResult = writer.TryInitialize(pathw_w,true);
LastNnResult = writer.TryInitialize(pathw_w,make);
return LastNnResult.IsSuccess();
}
@ -208,13 +222,15 @@ bool SaveFileWrite::OpenW(const wchar_t *path)
//クローズ
void SaveFileWrite::CloseW()
{
writer.TryFlush();
writer.Finalize();
}
s32 SaveFileWrite::Write(char *buffer,size_t size)
{
s32 ct;
LastNnResult = writer.TryWrite(&ct,(void*)buffer,size);
// LastNnResult = writer.TryWrite(&ct,(void*)buffer,size,true);
LastNnResult = writer.TryWrite(&ct,(void*)buffer,size,false);
if(LastNnResult.IsFailure()){NN_LOG("write fail\n");ct=0;}
return ct;
}
@ -235,12 +251,27 @@ bool SaveFileWrite::DeleteDir(const wchar_t *dir)
return LastNnResult.IsSuccess();
}
bool SaveFileWrite::DeleteFile(const wchar_t *path)
bool SaveFileWrite::DeleteFile(wchar_t *path)
{
LastNnResult = nn::fs::TryDeleteFile(path);
wcscpy(pathw_w,root_w);
ChainPath(pathw_w,path);
LastNnResult = nn::fs::TryDeleteFile(pathw_w);
return LastNnResult.IsSuccess();
}
bool SaveFileWrite::SetPosW(s64 pos)
{
LastNnResult = writer.TrySetPosition(pos);
return LastNnResult.IsSuccess();
}
bool SaveFileWrite::Flush()
{
LastNnResult = writer.TryFlush();
return LastNnResult.IsSuccess();
}
//------------------------------------------------------ Class SaveFileRead
bool SaveFileRead::Open(const wchar_t *path)
{
@ -351,6 +382,8 @@ static nn::fs::Directory dcl;
m_info.DirEntry = 0;
m_info.FileEntry = 0;
m_info.total = 0;
m_info.min = 0;
m_info.max = 0;
m_info.Dup = false;
wcscpy(pathw_w,root_w);
wcscat(pathw_w,L"/");
@ -392,6 +425,8 @@ static nn::fs::Directory dcl;
m_info.FileCount++;
if (clsz==0){
m_info.total += dcEntryl.entrySize;
if (dcEntryl.entrySize < m_info.min )m_info.min = dcEntryl.entrySize;
if (dcEntryl.entrySize > m_info.max )m_info.max = dcEntryl.entrySize;
}else{//クラスタサイズで調整 .. SD占有容量
sn = dcEntryl.entrySize / clsz;
if ((dcEntryl.entrySize % clsz) > 0 )sn++;

View File

@ -59,6 +59,7 @@ bool CmpPathW(wchar_t *s,wchar_t *s2);
#define INFO_VERSION 0
struct tArcInfo{
s64 total;//ファイルサイズ総計
u32 min,max;//最少、最大
u32 DirEntry,FileEntry;//フォーマット
u32 DirCount,FileCount;//Dir,ファイル数
char Pcode[20];//product code SDKのサイズを下回らないこと
@ -135,13 +136,16 @@ public:
~SaveFileWrite(){};
bool DeleteDir(const wchar_t *dir);
bool MakeDir(wchar_t *path,bool *mkdir);
bool DeleteFile(const wchar_t *path);
bool OpenW(const wchar_t *path);
bool DeleteFile(wchar_t *path);
bool OpenW(const wchar_t *path,bool make);
bool OpenC(wchar_t *path,s64 size,bool *mkdir);
bool OpenAdd(wchar_t *path);
void CloseW();
bool SetPosW(s64 pos);
bool CreateFile(wchar_t *path,s64 size);
s32 Write(char *buffer,size_t size);
bool CreateDir(const wchar_t *dir);
bool Flush();
};
//リード

View File

@ -395,6 +395,7 @@ void shf_SetColorW(f32 r,f32 g,f32 b,f32 a)
}
#define STD_FONT_ONLY 1
//初期化
//AppHeap確保、RenderSystem.Inititの後に呼ぶ
@ -402,11 +403,12 @@ void SharedFontInit()
{
InitGX();
// 共有フォントの初期化
#ifndef STD_FONT_ONLY
// 本体リージョンのフォントロード
NN_UTIL_PANIC_IF_FAILED(nn::pl::InitializeSharedFont());
// 共有フォントのロードが完了するまで待機
// ロードが完了するまで待機
while (nn::pl::GetSharedFontLoadState() != nn::pl::SHARED_FONT_LOAD_STATE_LOADED)
{
// 共有フォントのロードに失敗していないか確認
@ -417,11 +419,31 @@ void SharedFontInit()
nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(1));
}
// 共有フォントの種類を取得
// フォントの種類を取得
//nn::pl::SharedFontType sharedFontType = nn::pl::GetSharedFontType();
// 共有フォントデータのアドレスを取得
// フォントデータのアドレスを取得
void* pFontBuffer = nn::pl::GetSharedFontAddress();
#else
//日英フォントロード
const size_t ROMFS_BUFFER_SIZE = 1024 * 64;
static char buffer[ROMFS_BUFFER_SIZE];
nn::pl::MountSharedFont("font:",nn::pl::SHARED_FONT_TYPE_STD,
16, 16, buffer, ROMFS_BUFFER_SIZE);
nn::fs::FileReader fontReader("font:/cbf_std.bcfnt.lz");
const u32 fileSize = (u32)fontReader.GetSize();
void* fontBinary = appHeap.Allocate(fileSize);
NN_NULL_ASSERT(fontBinary);
fontReader.Read(fontBinary, fileSize);
const u32 fontsize = nn::cx::GetUncompressedSize(fontBinary);
void* pFontBuffer = appHeap.Allocate(fontsize,128);
NN_NULL_ASSERT(pFontBuffer);
nn::cx::UncompressAny(fontBinary,pFontBuffer);
#endif
InitFont(&font, pFontBuffer);
@ -440,6 +462,13 @@ void SharedFontInit()
SetupTextCamera(&drawer, NN_GX_DISPLAY0_WIDTH, NN_GX_DISPLAY0_HEIGHT);
#ifdef STD_FONT_ONLY
appHeap.Free(pFontBuffer);
appHeap.Free(fontBinary);
fontReader.Finalize();
nn::pl::UnmountSharedFont("font:");
#endif
}

View File

@ -31,8 +31,8 @@ wchar_t file_pathw[1024];
char file_path[1024];
char file_path2[1024];
char src_buff[1024*1024];
char get_buff[1024*1024];
char str[512];
char get_buff[1024*1024];//リード指定サイズより小さくならないよう注意
char str[1024];
extern demo::RenderSystemDrawing s_RenderSystem;
@ -63,11 +63,13 @@ void make_pattern()
//TEST ライト
s32 size;
#define SIZE_TEST1 421888
s64 lsize;
//#define SIZE_TEST1 421888
//#define SIZE_TEST1 244736 //dup
#define DMX_TEST0 100
#define FMX_TEST0 100
#define DUP_TEST0 true
#define SIZE_TEST0 500
bool Test0_W(int n)//Casual
{
@ -82,7 +84,9 @@ bool Test0_W(int n)//Casual
return false;
}
int num = 0,total=0,size=512;
s32 wsize= SIZE_TEST0;
int num = 0,total=0;
while(1){
/*
swprintf(file_pathw,512,L"data:/空ディレクトリ%d",num);
@ -100,14 +104,14 @@ bool Test0_W(int n)//Casual
nn::fs::Unmount("data:");
return false;
}
sprintf(file_path,"data:/null%d",num);
sprintf(file_path,"data:/test0dir%d",num);
res = nn::fs::TryCreateDirectory(file_path);
if (res.IsFailure()){
drawText(8,100,"Dir create Fail");
nn::fs::Unmount("data:");
return false;
}
sprintf(file_path,"data:/null%d/nulldir",num);
sprintf(file_path,"data:/test0dir%d/nulldir",num);
res = nn::fs::TryCreateDirectory(file_path);
if (res.IsFailure()){
drawText(8,100,"Dir create Fail");
@ -125,6 +129,7 @@ bool Test0_W(int n)//Casual
//sprintf(file_path,"data:/test%d/test%d.bin",num,num);
//res = fout.TryInitialize(file_path,true);
//swprintf(file_pathw,512,L"data:/テスト%d/テスト%d.bin",num,num);
swprintf(file_pathw,512,L"data:/test%d/test%d.bin",num,num);
res = fout.TryInitialize(file_pathw,true);
if (res.IsFailure()){
@ -132,7 +137,7 @@ bool Test0_W(int n)//Casual
nn::fs::Unmount("data:");
return false;
}
res = fout.TryWrite( &size,&src_buff[total],size);
res = fout.TryWrite( &size,&src_buff[total],wsize,true);
if (res.IsFailure()){
drawText(8,100,"write Fail");
fout.Finalize();
@ -141,7 +146,18 @@ bool Test0_W(int n)//Casual
}
fout.Finalize();
total += size;
size += size;
wsize += SIZE_TEST0;
swprintf(file_pathw,512,L"data:/test%d/null%d.bin",num,num);
res = fout.TryInitialize(file_pathw,true);
if (res.IsFailure()){
drawText(8,100,"open Fail");
nn::fs::Unmount("data:");
return false;
}
fout.TryFlush();
fout.Finalize();
num++;
sprintf(str,"size %d , num %d",total,num);
s_RenderSystem.Clear();
@ -163,7 +179,8 @@ bool Test0_W(int n)//Casual
bool Test0_V(int n)//Casual
{
int num = 0,total=0,size = 512;
int num = 0,total=0;
s32 rsize=SIZE_TEST0;
size_t maxF,maxD;
bool isDup;
@ -181,8 +198,6 @@ bool Test0_V(int n)//Casual
return false;
}
while(1){
sprintf(file_path,"data:/nulldir%d",num);//ディレクトリ
res = dc.TryInitialize(file_path);
@ -193,7 +208,7 @@ bool Test0_V(int n)//Casual
return false;
}
dc.Finalize();
sprintf(file_path,"data:/null%d/nulldir",num);//ディレクトリ
sprintf(file_path,"data:/test0dir%d/nulldir",num);//ディレクトリ
res = dc.TryInitialize(file_path);
if (res.IsFailure()){
drawText(8,100,"open Dir");
@ -214,6 +229,7 @@ bool Test0_V(int n)//Casual
dc.Finalize();
*/
//swprintf(file_pathw,512,L"data:/テスト%d/テスト%d.bin",num,num);
swprintf(file_pathw,512,L"data:/test%d/test%d.bin",num,num);
res = fin.TryInitialize(file_pathw);
if (res.IsFailure()){
@ -221,17 +237,43 @@ bool Test0_V(int n)//Casual
nn::fs::Unmount("data:");
return false;
}
res = fin.TryRead( &size,&get_buff[total],size);
res = fin.TryRead( &size,get_buff,rsize);
if (res.IsFailure()){
drawText(8,100,"read Fail");
fin.Finalize();
nn::fs::Unmount("data:");
return false;
}
for(int i=0;i<size;i++)if (src_buff[total+i]!=get_buff[total+i])return false;
fin.Finalize();
if (size != rsize){
drawText(8,100,"size Fail");
nn::fs::Unmount("data:");
return false;
}
for(int i=0;i<size;i++)if (src_buff[total+i]!=get_buff[i]){
drawText(8,100,"verifi Fail");
nn::fs::Unmount("data:");
return false;
}
total += size;
size+=size;
rsize+=SIZE_TEST0;
swprintf(file_pathw,512,L"data:/test%d/null%d.bin",num,num);
res = fin.TryInitialize(file_pathw);
if (res.IsFailure()){
drawText(8,100,"open Fail");
nn::fs::Unmount("data:");
return false;
}
res = fin.TryGetSize( &lsize);
fin.Finalize();
if (res.IsFailure() || (lsize !=0)){
drawText(8,100,"size Fail");
nn::fs::Unmount("data:");
return false;
}
num++;
sprintf(str,"size %d , num %d",total,num);
s_RenderSystem.Clear();
@ -239,9 +281,10 @@ bool Test0_V(int n)//Casual
s_RenderSystem.SwapBuffers();
//if (size<512)break;
if (num == n)break;
}
fin.Finalize();
nn::fs::CommitSaveData();
nn::fs::Unmount("data:");
NN_LOG("total %d",total);
drawText(10,100,"end");
@ -250,12 +293,13 @@ bool Test0_V(int n)//Casual
return true;
}
bool Test1_W()
s64 test1_sz = 0;
bool Test1_W(int sft)
{
int total,size2;
int total,size2,idx;
res = nn::fs::FormatSaveData(1,0,false);
// res = nn::fs::FormatSaveData(1,0,true);
if (res.IsFailure()){
drawText(8,100,"format Fail");
return false;
@ -266,7 +310,16 @@ bool Test1_W()
return false;
}
res = nn::fs::TryCreateFile(L"data:/test1.bin",SIZE_TEST1);
res = nn::fs::GetArchiveFreeBytes(&test1_sz,"data:");
if (res.IsFailure()){
drawText(8,100,"GetSize Fail");
return false;
}
test1_sz = test1_sz >> sft;
// res = nn::fs::TryCreateFile(L"data:/test1.bin",SIZE_TEST1);
res = nn::fs::TryCreateFile(L"data:/test1.bin",test1_sz);
if (res.IsFailure()){
drawText(8,100,"Create Fail");
nn::fs::Unmount("data:");
@ -278,12 +331,10 @@ bool Test1_W()
nn::fs::Unmount("data:");
return false;
}
total =0;
total =0;idx =0;
size2 = 512;
//size2 = 4096;
//size2 = SIZE_TEST1;
while(1){
res = fout.TryWrite( &size,&src_buff[total],size2);
res = fout.TryWrite( &size,&src_buff[idx],size2,false);
if (res.IsFailure()){
drawText(8,100,"write Fail");
fout.Finalize();
@ -291,15 +342,24 @@ bool Test1_W()
return false;
}
total += size;
sprintf(str,"size %d",total);
sprintf(str,"size %d / %d",total,(s32)test1_sz);
s_RenderSystem.Clear();
drawText(10,80,str);
s_RenderSystem.SwapBuffers();
//if (size<512)break;
if (total >= SIZE_TEST1)break;
if ((SIZE_TEST1 - total) < 512)size2 = SIZE_TEST1 - total ;
if (size<512)break;
idx += size;
if (idx >= sizeof(src_buff))idx = 0;
//if ((SIZE_TEST1 - total) < 512)size2 = SIZE_TEST1 - total ;
if ((test1_sz - total) < 512)size2 = test1_sz - total ;
if (size2 ==0)break;
}
res = fout.TryFlush();
fout.Finalize();
if (res.IsFailure()){
drawText(8,100,"flush Fail");
nn::fs::Unmount("data:");
return false;
}
nn::fs::CommitSaveData();
nn::fs::Unmount("data:");
NN_LOG("total %d",total);
@ -310,9 +370,16 @@ bool Test1_W()
}
//ベリファイ
bool Test1_V()
bool Test1_V(int sft)
{
int i,total;
int i,total,idx;
res = nn::fs::GetArchiveFreeBytes(&test1_sz,"data:");
if (res.IsFailure()){
drawText(8,100,"GetSize Fail");
return false;
}
test1_sz = test1_sz >> sft;
res = fin.TryInitialize(L"data:/test1.bin");
if (res.IsFailure())
@ -322,9 +389,20 @@ bool Test1_V()
nn::fs::Unmount("data:");
return false;
}
total =0;
res = fin.TryGetSize(&test1_sz);
if (res.IsFailure())
{
//NN_LOG("%d\n",res.GetDescription());
drawText(8,100,"GetSize Fail");
fin.Finalize();
nn::fs::Unmount("data:");
return false;
}
total =0;idx=0;
while(1){
res = fin.TryRead( &size,&get_buff[total],512);
res = fin.TryRead( &size,get_buff,512);
if (res.IsFailure()){
drawText(8,100,"read Fail");
fin.Finalize();
@ -332,7 +410,7 @@ bool Test1_V()
return false;
}
//if (size == 0)break;
for (i=0;i<size;i++) if (src_buff[total+i] != get_buff[total+i])
for (i=0;i<size;i++) if (src_buff[idx+i] != get_buff[i])
{
drawText(8,100,"verifi Fail at %d",total+i);
fin.Finalize();
@ -340,16 +418,18 @@ bool Test1_V()
return false;
}
if (total >= SIZE_TEST1)break;
idx += size;
if (idx >= sizeof(src_buff))idx=0;
total += size;
if (total >= test1_sz)break;
s_RenderSystem.Clear();
sprintf(str,"now %d",total);
drawText(10,80,str);
s_RenderSystem.SwapBuffers();
if (size<512)break;
}
fout.Finalize();
fin.Finalize();
nn::fs::Unmount("data:");
drawText(10,100,"end");
s_RenderSystem.SwapBuffers();
@ -357,7 +437,8 @@ bool Test1_V()
return true;
}
#define test2_max 680
//#define test2_max 680
#define test2_max 100
#define test2_ct test2_max
//#define test2_max 10
//#define test2_ct 5
@ -396,7 +477,7 @@ bool Test2_W(int n)
nn::fs::Unmount("data:");
return false;
}
res = fout.TryWrite( &size,&src_buff[total],size2);
res = fout.TryWrite( &size,&src_buff[total],size2,true);
if (res.IsFailure()){
drawText(8,100,"write Fail");
fout.Finalize();
@ -438,14 +519,14 @@ bool Test2_V(int n)
nn::fs::Unmount("data:");
return false;
}
res = fin.TryRead( &size,&get_buff[total],size2);
res = fin.TryRead( &size,get_buff,size2);
if (res.IsFailure()){
drawText(8,100,"read Fail");
fin.Finalize();
nn::fs::Unmount("data:");
return false;
}
for (i=0;i<size;i++) if (src_buff[total+i] != get_buff[total+i])
for (i=0;i<size;i++) if (src_buff[total+i] != get_buff[i])
{
drawText(8,100,"verifi Fail at %d",total+i);
fin.Finalize();
@ -520,7 +601,7 @@ bool Test3_W()
nn::fs::Unmount("data:");
return false;
}
res = fout.TryWrite( &size,&src_buff[total],size2);
res = fout.TryWrite( &size,&src_buff[total],size2,true);
if (res.IsFailure()){
drawText(8,100,"write Fail");
fout.Finalize();
@ -571,14 +652,14 @@ bool Test3_V()
nn::fs::Unmount("data:");
return false;
}
res = fin.TryRead( &size,&get_buff[total],size2);
res = fin.TryRead( &size,get_buff,size2);
if (res.IsFailure()){
drawText(8,100,"read Fail");
fin.Finalize();
nn::fs::Unmount("data:");
return false;
}
for (i=0;i<size;i++) if (src_buff[total+i] != get_buff[total+i])
for (i=0;i<size;i++) if (src_buff[total+i] != get_buff[i])
{
drawText(8,100,"verifi Fail at %d",total+i);
fin.Finalize();
@ -640,7 +721,7 @@ bool Test4_W()
nn::fs::Unmount("data:");
return false;
}
res = fout.TryWrite( &size,&src_buff[0],512);
res = fout.TryWrite( &size,&src_buff[0],512,true);
if (res.IsFailure()){
drawText(8,100,"Write Fail");
fout.Finalize();
@ -669,7 +750,7 @@ bool Test4_V()
nn::fs::Unmount("data:");
return false;
}
res = fin.TryRead( &size,&get_buff[0],512);
res = fin.TryRead( &size,get_buff,512);
if (res.IsFailure()){
drawText(8,100,"Read Fail");
fin.Finalize();
@ -764,6 +845,7 @@ bool Test4_V()
}
*/
#define SIZE_TEST5 (512*100)
#define SIZE_TEST5_HZ 4096
#define SIZE_TEST5_START 512*16
@ -810,7 +892,7 @@ bool Test5_W()
pos = SIZE_TEST5_START;
while(1){
fout.SetPosition(pos);
res = fout.TryWrite( &size,&src_buff[pos],512);
res = fout.TryWrite( &size,&src_buff[pos],512,false);
if (res.IsFailure() || (size!=512)){
drawText(8,100,"write Fail");
fout.Finalize();
@ -824,8 +906,13 @@ bool Test5_W()
pos += SIZE_TEST5_HZ;//間を飛ばす
if (pos >= SIZE_TEST5)break;
}
res = fout.TryFlush();
fout.Finalize();
if (res.IsFailure()){
drawText(8,100,"flush Fail");
nn::fs::Unmount("data:");
return false;
}
nn::fs::CommitSaveData();
nn::fs::Unmount("data:");
drawText(10,100,"end");
@ -849,7 +936,7 @@ bool Test5_V()
pos = SIZE_TEST5_START;
while(1){
fin.SetPosition(pos);
res = fin.TryRead( &size,&get_buff[pos],512);
res = fin.TryRead( &size,get_buff,512);
if (res.IsFailure() || (size!=512)){
drawText(8,100,"read Fail");
fin.Finalize();
@ -861,7 +948,7 @@ bool Test5_V()
drawText(10,80,str);
s_RenderSystem.SwapBuffers();
for (i=0;i<512;i++) if (src_buff[pos+i] != get_buff[pos+i])
for (i=0;i<512;i++) if (src_buff[pos+i] != get_buff[i])
{
drawText(8,100,"verifi Fail at %d",i);
return false;
@ -936,7 +1023,7 @@ bool Test6_W()
nn::fs::Unmount("data:");
return false;
}
res = fout.TryWrite( &size,&src_buff[ofst],512);
res = fout.TryWrite( &size,&src_buff[ofst],512,true);
if (res.IsFailure()){
drawText(8,100,"write fail");
nn::fs::Unmount("data:");
@ -977,7 +1064,7 @@ bool Test6_W()
nn::fs::Unmount("data:");
return false;
}
res = fout.TryWrite( &size,&src_buff[ofst],512);
res = fout.TryWrite( &size,&src_buff[ofst],512,true);
if (res.IsFailure()){
drawText(8,100,"write fail");
nn::fs::Unmount("data:");
@ -1010,7 +1097,7 @@ bool Test6_W()
nn::fs::Unmount("data:");
return false;
}
res = fout.TryWrite( &size,&src_buff[ofst],512);
res = fout.TryWrite( &size,&src_buff[ofst],512,true);
if (res.IsFailure()){
drawText(8,100,"write fail");
nn::fs::Unmount("data:");
@ -1063,7 +1150,7 @@ bool Test6_V()
nn::fs::Unmount("data:");
return false;
}
res = fin.TryRead( &size,&get_buff[ofst],512);
res = fin.TryRead( &size,get_buff,512);
if (res.IsFailure()){
drawText(8,100,"read fail");
nn::fs::Unmount("data:");
@ -1071,7 +1158,7 @@ bool Test6_V()
}
fin.Finalize();
for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[ofst+i]){
for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[i]){
drawText(8,100,"verifi fail");
nn::fs::Unmount("data:");
return false;
@ -1102,7 +1189,7 @@ bool Test6_V()
nn::fs::Unmount("data:");
return false;
}
res = fin.TryRead( &size,&get_buff[ofst],512);
res = fin.TryRead( &size,get_buff,512);
if (res.IsFailure()){
drawText(8,100,"write fail");
nn::fs::Unmount("data:");
@ -1110,7 +1197,7 @@ bool Test6_V()
}
fout.Finalize();
for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[ofst+i]){
for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[i]){
drawText(8,100,"verifi fail");
nn::fs::Unmount("data:");
return false;
@ -1135,7 +1222,7 @@ bool Test6_V()
nn::fs::Unmount("data:");
return false;
}
res = fin.TryRead( &size,&get_buff[ofst],512);
res = fin.TryRead( &size,get_buff,512);
if (res.IsFailure()){
drawText(8,100,"read fail");
nn::fs::Unmount("data:");
@ -1143,7 +1230,7 @@ bool Test6_V()
}
fin.Finalize();
for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[ofst+i]){
for(j=0;j<512;j++)if(src_buff[ofst+i] != get_buff[i]){
drawText(8,100,"verifi fail");
nn::fs::Unmount("data:");
return false;
@ -1160,11 +1247,129 @@ bool Test6_V()
return true;
}
#define menu_ct 7
#define menu_max (menu_ct-1)
char* menu_str[menu_ct] = {"Casual check","Large size","many files","Deep directry","max size name","data < create size","fat error name"};
#define menu_top_Y 80
//ディレクトリのみ
bool Test7_W(int n)
{
res = nn::fs::FormatSaveData(DMX_TEST0,FMX_TEST0,DUP_TEST0);
if (res.IsFailure()){
drawText(8,100,"format Fail");
return false;
}
res =nn::fs::MountSaveData();
if (res.IsFailure()){
drawText(8,100,"Mount Fail");
return false;
}
int num = 0;
while(1){
sprintf(file_path,"data:/nulldir%d",num);
res = nn::fs::TryCreateDirectory(file_path);
if (res.IsFailure()){
drawText(8,100,"Dir create Fail");
nn::fs::Unmount("data:");
return false;
}
sprintf(file_path,"data:/test7dir%d",num);
res = nn::fs::TryCreateDirectory(file_path);
if (res.IsFailure()){
drawText(8,100,"Dir create Fail");
nn::fs::Unmount("data:");
return false;
}
sprintf(file_path,"data:/test7dir%d/nulldir",num);
res = nn::fs::TryCreateDirectory(file_path);
if (res.IsFailure()){
drawText(8,100,"Dir create Fail");
nn::fs::Unmount("data:");
return false;
}
num++;
sprintf(str,"num %d",num*3);
s_RenderSystem.Clear();
drawText(10,80,str);
s_RenderSystem.SwapBuffers();
//if (size<512)break;
if (num == n)break;
}
nn::fs::CommitSaveData();
nn::fs::Unmount("data:");
drawText(10,100,"end");
s_RenderSystem.SwapBuffers();
nngxWaitVSync(NN_GX_DISPLAY0);
return true;
}
bool Test7_V(int n)
{
int num = 0;
size_t maxF,maxD;
bool isDup;
nn::fs::Directory dc;
res = nn::fs::GetSaveDataFormatInfo(&maxF,&maxD,&isDup);
if (res.IsFailure()){
drawText(8,100,"fail to get formatinfo");
nn::fs::Unmount("data:");
return false;
}
if ((maxF != FMX_TEST0)||(maxD!=DMX_TEST0)||(isDup != DUP_TEST0)){
drawText(8,100,"wrong format");
nn::fs::Unmount("data:");
return false;
}
while(1){
sprintf(file_path,"data:/nulldir%d",num);//ディレクトリ
res = dc.TryInitialize(file_path);
if (res.IsFailure()){
drawText(8,100,"open Dir");
dc.Finalize();
nn::fs::Unmount("data:");
return false;
}
dc.Finalize();
sprintf(file_path,"data:/test7dir%d/nulldir",num);//ディレクトリ
res = dc.TryInitialize(file_path);
if (res.IsFailure()){
drawText(8,100,"open Dir");
dc.Finalize();
nn::fs::Unmount("data:");
return false;
}
dc.Finalize();
num++;
sprintf(str," num %d",num*3);
s_RenderSystem.Clear();
drawText(10,80,str);
s_RenderSystem.SwapBuffers();
if (num == n)break;
}
nn::fs::Unmount("data:");
drawText(10,100,"end");
s_RenderSystem.SwapBuffers();
nngxWaitVSync(NN_GX_DISPLAY0);
return true;
}
#define menu_ct 9
#define menu_max (menu_ct-1)
char* menu_str[menu_ct] = {"Casual check","Max size","Max/32 size","many files","Deep directry"
,"max size name","data < create size","fat error name","Dir Only"};
#define menu_top_Y 70
#define menu_top_X 60
#define menu_spc 14
@ -1181,18 +1386,18 @@ void TestMain()
//TEST PATTERN
make_pattern();
while(1){
//menu 表示
//menu 表示
s_RenderSystem.Clear();
drawText(8,20," Backup Verifi for SaveDataMover Test ");
drawText(8,40," for 512KB Backup");
//drawText(8,40," for 512KB Backup");
for (i=0;i<menu_ct;i++)drawText(menu_top_X,menu_top_Y+menu_spc*i,menu_str[i]);
drawText(menu_top_X-30,menu_top_Y+menu_spc*curs,"->");
drawText(menu_top_X,menu_top_Y+menu_spc*(menu_max+2),"push A:Write ,X:Verifi");
s_RenderSystem.SwapBuffers();
nngxWaitVSync(NN_GX_DISPLAY0);
//ボタン待ち
value = WaitKey(nn::hid::BUTTON_A | nn::hid::BUTTON_X |nn::hid::BUTTON_UP |nn::hid::BUTTON_DOWN);
@ -1203,17 +1408,21 @@ void TestMain()
s_RenderSystem.SwapBuffers();
nngxWaitVSync(NN_GX_DISPLAY0);
switch(curs){
case 0:sccs = Test0_W(5);break;
case 1:sccs = Test1_W();break;
case 2:sccs = Test2_W(test2_ct);break;
case 3:sccs = Test3_W();break;
case 4:sccs = Test4_W();break;
case 5:sccs = Test5_W();break;
case 6:sccs = Test6_W();break;
case 0:sccs = Test0_W(5);break;//5file
case 1:sccs = Test1_W(0);break;
case 2:sccs = Test1_W(5);break;//max >> 5
case 3:sccs = Test2_W(test2_ct);break;
case 4:sccs = Test3_W();break;
case 5:sccs = Test4_W();break;
case 6:sccs = Test5_W();break;
case 7:sccs = Test6_W();break;
case 8:sccs = Test7_W(5);break;
default:break;
}
}else if (value & nn::hid::BUTTON_X)
{//ベリファイ
//書いた分のチェック、余分にあるかまでは見てない
//ツール側で構成チェックをすること
sccs = false;
s_RenderSystem.Clear();
drawText(10,70,"verifi");
@ -1225,12 +1434,14 @@ void TestMain()
}else
switch(curs){
case 0:sccs = Test0_V(5);break;
case 1:sccs = Test1_V();break;
case 2:sccs = Test2_V(680);break;
case 3:sccs = Test3_V();break;
case 4:sccs = Test4_V();break;
case 5:sccs = Test5_V();break;
case 6:sccs = Test6_V();break;
case 1:sccs = Test1_V(0);break;
case 2:sccs = Test1_V(5);break;
case 3:sccs = Test2_V(test2_ct);break;
case 4:sccs = Test3_V();break;
case 5:sccs = Test4_V();break;
case 6:sccs = Test5_V();break;
case 7:sccs = Test6_V();break;
case 8:sccs = Test7_V(5);break;
default:break;
}
}else if (value & nn::hid::BUTTON_UP){